Python:从字典中删除项目

时间:2017-02-03 16:17:19

标签: python list dictionary

我有一个包含列表的字典,例如像这样:

dict1 = {'age'    : [14, 15, 17, 16], 
         'height' : [158, 162, 159, 179]}

我想通过这个字典查看特定项目的条件,并返回没有相关值的字典。

例如:条件为:“age> 15”。我期待回归:

{'age' : [17, 16], 'height' : [159, 179]}

(注意oder是守恒的)

你知道我怎么能得到这个吗?我认为条件表达式是可能的,但它对我来说仍然是一个谜......

感谢。 :)

2 个答案:

答案 0 :(得分:0)

你可以用词典理解来做到这一点:

dict1 = {i: [dict1[i][j] for j in range(len(dict1[i])) if dict1['age'][j] > 15] for i in dict1.keys()}

对于旧字典中的每个键,都会在新字典中创建一个条目,而新列表将映射到此键,该键将根据具有指定条件的所需键的旧列表构建和过滤。

如果你真的想为一个函数提供一个键和一个条件,这会有点棘手。假设你只有字符串键,这样的函数可以像这样实现:

def subDict(dictionary, key, condition):
    condition = "dictionary['"+key+"'][j] "+condition
    return {i: [dictionary[i][j] for j in range(len(dictionary[i])) if eval(condition)] for i in dictionary.keys()}
print(subDict(dict1, "age", "> 15"))

eval()的使用虽然容易出错,因为用户输入是直接评估的,因此在条件更复杂的情况下,该函数可能不会很有弹性。

Boolean indexing在pandas DataFrame中实现,您的数据非常适合这样的DataFrame:

import pandas as pd
df = pd.DataFrame(dict1)
print(df[df["age"] > 15])

输出:

   age  height
2   17     159
3   16     179

答案 1 :(得分:0)

试试这个:

#initial dict
d = {'age'    : [14, 15, 17, 16], 'height' : [158, 162, 159, 179]}
#get indices with values greater than 15
indices = [index for index,value in enumerate(d['age']) if value > 15]
#create list with values in indices
l = [[v for i, v in enumerate(d['age']) if i in indices], [v for i, v in enumerate(d['height']) if i in indices]]
#create list with dict keys
k = d.keys()
#zip dict keys
d= dict(zip(k, l))
print d