对于带有dictionary和If Condition的循环



在使用dictionarys时,如何使用for循环和if语句获得新的项目列表?

我有一个包含一组数字的列表,想检查这些数字是否在我创建的词典中。下一步是为字典中的每个数字创建一个新的列表,其中包含其中的值

import pandas as pd
## Create new list with data inside .csv
df = pd.read_csv("data.csv", sep=";")
item_nr = df["Items"].tolist()
item_date = df["Date"].tolist()
# Creating a dict with for loop ("Item":"Date")
item_dict = {}
for i in range(len(item_nr)):
item_dict[item_nr[i]] = item_date[i]
## Creating a list with dates from dictionary
date_list = []
for item in items_list_sold:
if item == item_dict.keys():
date_list.append(item_dict)
print(date_list)

您的代码有三个主要问题:

  1. 您使用的if item == item_dict.keys():几乎可以肯定不可能是True。您正在与dict_keys对象进行相等性比较。相反,要检查字典中的成员身份,只需测试关键字是否为字典中的in
  2. 即使在(1(中修复了问题,也可以将整个字典附加到date_list.append(item_dict)中的列表中。相反,您需要使用键来获取值
  3. 你正在使用pandas来阅读CSV,然后笨拙地将其转换为dict.很多答案都建议pandas做这类工作,这有时看起来有些过分,但如果你要使用pandass而不是csv库,你应该习惯地这样做

这应该是你想要的:

import pandas as pd
## Create new list with data inside .csv
df = pd.read_csv("data.csv", sep=";")
item_dict = pd.Series(df['Date'].values, index=df['Items']).to_dict()
## Creating a list with dates from dictionary
date_list = []
for item in items_list_sold: # Use "in" to check for membership
if item in item_dict:
date_list.append(item_dict[item]) # You need to use "item" as a key to get at the date value

可以通过列表理解进一步压缩为:

df = pd.read_csv("data.csv", sep=";")
item_dict = pd.Series(df['Date'].values, index=df['Items']).to_dict()
date_list = [item_dict[thing] for thing in items_list_sold if thing in item_dict] # Shorter, but getting harder to read now, as-of the edit

我之所以使用"thing",是因为如果您不习惯列出理解,"item"会让您感到有点困惑。

考虑到第(2(点的实现,一个更清晰的列表理解可能是:

date_list = [date for item, date in item_dict.items() if item in item_list_sold]

最后,既然你无论如何都在使用熊猫,你可以把它用于整个事情,这将是最好的方法:

df = pd.read_csv("data.csv", sep=";")
date_list = df.loc[df['Items'].isin(item_list_sold), 'Date'].tolist()

最新更新