在python词典中搜索词典

时间:2017-05-04 11:56:09

标签: python dictionary search iteration

我有一本名为data_dict的词典字典。以下是它的外观:

{'UMANOFF ADAM S': {'total_stock_value': 'NaN', 'loans': 'NaN', 'salary': 288589},
'YEAP SOON': {'total_stock_value': 192758, 'loans': 'NaN', 'salary': 'NaN'},
'PIPER GREGORY F': {'total_stock_value': 880290, 'loans': 1452356, 'salary': 19791},
'Jack S': {'total_stock_value': 88000, 'loans': 'NaN', 'salary': 288589}
}

基本上它的格式为

{Person Name : Dictionary of that person's attributes}

我试图找到一个薪水肯定为X的人的名字。 特别是在上面的例子中 - 假设我试图找到薪水为288589的人的姓名。我希望所有姓名的薪水都是288589.

我写了下面的通用函数,它将获取一个搜索键和值,并返回该键值的值的名称。

def search_person_by_attribute(attribute, value):
    person_names = []

    for person, attributes_dict in data_dict.items():
        if attributes_dict[attribute] == value:
            person_names.append(person)

    return person_names

此方法成功运行

results = search_person_by_attribute("salary", 288589)
print(results)

并打印

['UMANOFF ADAM S','Jack S']

但不知怎的,我觉得写这篇文章还有很长的路要走。是否有更好/更短/更pythonic的方式来做它?

如果您还可以提及我的效率(就时间复杂度而言)以及您建议的解决方案将是一个很好的奖励。

1 个答案:

答案 0 :(得分:5)

我会建议像这样的东西,我认为它不仅更短,而且比你的版本更具可读性:

def search_person_by_attribute(d, attribute, value):
    return [name for name in d if d[name][attribute] == value]

它的工作方式与您的完全相同,但需要将字典作为附加参数,因为我觉得这样的风格更好:

>>> search_person_by_attribute(d, "salary", 288589)
['UMANOFF ADAM S', 'Jack S']