需要根据python中的条件修改字典及其元素

需要根据python中的条件修改字典及其元素,python,dictionary,Python,Dictionary,输入: 输出: dict1 = {'Category': ['item1','item2','item3','item4'], 'Freq': [71984.0, 8129.0, 3140.0, 0.0]} 要做的任务: 创建一个新字典,其中不包含所有0.0 Freq值和类别中的相应项 dict2 = {'Category': ['item1','item2','item3'], 'Freq': [71984.0, 8129.0, 3140.0]} 返回: {'Category':['i

输入:

输出:

dict1 = {'Category': ['item1','item2','item3','item4'],
 'Freq': [71984.0, 8129.0, 3140.0, 0.0]}
要做的任务: 创建一个新字典,其中不包含所有0.0 Freq值和类别中的相应项

dict2 = {'Category': ['item1','item2','item3'],
 'Freq': [71984.0, 8129.0, 3140.0]}
返回:


{'Category':['item1','item2','item3'],'Freq':[71984.08129.03140.0]}

也许有一种更优雅的方法可以解决这个问题,但这确实起到了作用:

dict1 = {
    'Category': ['item1','item2','item3','item4'],
    'Freq': [71984.0, 8129.0, 3140.0, 0.0]
}

indices_to_delete = []
for i, e in enumerate(dict1['Freq']):
    if e == 0:
        indices_to_delete.append(i)

dict2 = {
    key: [
        v
        for i, v in enumerate(dict1[key])
        if i not in indices_to_delete
    ]
    for key in dict1.keys()
}

dict2
产出:

dict1 = {'Category': ['item1','item2','item3','item4'],
 'Freq': [71984.0, 8129.0, 3140.0, 0.0]}

# create an empty list to save indices that you want to delete from both lists
del_ind = []

# iterate over the list of Frequencies
for x in dict1['Freq']:
  # if the value euquals 0.0, append the index of this value to your list
  if x == 0.0:
    ind = dict1['Freq'].index(x)
    del_ind.append(ind)

# then iterate over the list of indices you want to delete and use the pop method to delete those entries from both of your lists
for x in del_ind:
  dict1['Category'].pop(x)
  dict1['Freq'].pop(x)

print(dict1)

这是一种使用zip的方法

例:

输出:

如果您同意使用熊猫,可以执行以下操作:

首先通过将dict1传递到数据帧构造函数来创建数据帧:

{'Category': ('item1', 'item2', 'item3'), 'Freq': (71984.0, 8129.0, 3140.0)}
现在只保留Freq所在的行=0:

要将其重新输入词典,请执行以下操作:

print(df[df['Freq']!=0])
#  Category     Freq
#0    item1  71984.0
#1    item2   8129.0
#2    item3   3140.0

使用此方法的优点是,它很容易应用于两个以上的列表。

下面的代码将实现此功能

dict2 = df[df['Freq']!=0].to_dict(orient='list')
print(dict2)
#{'Category': ['item1', 'item2', 'item3'], 'Freq': [71984.0, 8129.0, 3140.0]}

拉凯什回答的稍微简洁的版本

dict1 = {'Category': ['item1','item2','item3','item4'],
 'Freq': [71984.0, 8129.0, 3140.0, 0.0]}

zipped = zip(*dict1.values())
filtered = filter(lambda x : x[1] != 0.0, zipped)
result = map(list, zip(*filtered))
print {
    'Category': result[0],
    'Freq': result[1]
}
输出

frequency_key = 'Freq'
category_key = 'Category'
freq,category = zip(*[[(i),(j)] for i,j in zip(dict1.get(frequency_key),dict1.get(category_key)) if i!=0])
{category_key:list(category),frequency_key:list(freq)}
请在询问之前提供您尝试的详细信息
dict2 = df[df['Freq']!=0].to_dict(orient='list')
print(dict2)
#{'Category': ['item1', 'item2', 'item3'], 'Freq': [71984.0, 8129.0, 3140.0]}
dict1 = {'Category': ['item1','item2','item3','item4'],
 'Freq': [71984.0, 8129.0, 3140.0, 0.0]}

zipped = zip(*dict1.values())
filtered = filter(lambda x : x[1] != 0.0, zipped)
result = map(list, zip(*filtered))
print {
    'Category': result[0],
    'Freq': result[1]
}
frequency_key = 'Freq'
category_key = 'Category'
freq,category = zip(*[[(i),(j)] for i,j in zip(dict1.get(frequency_key),dict1.get(category_key)) if i!=0])
{category_key:list(category),frequency_key:list(freq)}
{'Category': ['item1', 'item2', 'item3'], 'Freq': [71984.0, 8129.0, 3140.0]}