Python:从字典中删除项

Python:从字典中删除项,python,list,dictionary,Python,List,Dictionary,我有一本包含列表的词典,例如: dict1 = {'age' : [14, 15, 17, 16], 'height' : [158, 162, 159, 179]} 我想用一个特定项的条件遍历这个字典,然后返回一个没有相关值的字典 例如:条件为“年龄>15岁”。我希望返回: {'age' : [17, 16], 'height' : [159, 179]} (请注意,顺序是守恒的) 你知道我怎么才能得到这个吗?我认为使用条件表达式是可能的,但这对我来说仍然是一个迷

我有一本包含列表的词典,例如:

dict1 = {'age'    : [14, 15, 17, 16], 
         'height' : [158, 162, 159, 179]}
我想用一个特定项的条件遍历这个字典,然后返回一个没有相关值的字典

例如:条件为“年龄>15岁”。我希望返回:

{'age' : [17, 16], 'height' : [159, 179]}
(请注意,顺序是守恒的)

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


谢谢。:)

您可以通过词典理解来实现这一点:

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"))
import pandas as pd
df = pd.DataFrame(dict1)
print(df[df["age"] > 15])
但是,由于用户输入是直接计算的,因此使用
eval()
容易出错,因此在遇到更复杂的条件时,函数可能不是很灵活

在pandas DataFrame中实现,您的数据将非常适合以下数据帧:

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"))
import pandas as pd
df = pd.DataFrame(dict1)
print(df[df["age"] > 15])
输出:

   age  height
2   17     159
3   16     179
试试这个:

#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

你试过什么?看看熊猫,你可以用
tmp=pandas.DataFrame(dict1)来实现这一点;tmp.loc[tmp.age>15]