我有一本名为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的方式来做它?
如果您还可以提及我的效率(就时间复杂度而言)以及您建议的解决方案将是一个很好的奖励。
答案 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']