【发布时间】:2017-10-02 14:16:36
【问题描述】:
我有一本名为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']
但不知何故,我觉得写这篇文章的路还很长。有没有更好/更短/更蟒蛇的方式来做到这一点?
如果您还可以提及我的效率(在时间复杂度方面)以及您建议的解决方案将是一个很大的奖励。
【问题讨论】:
-
您可以根据需要创建一个专门的词典,使用当前词典作为输入。
-
如果你经常这样做,为什么不创建一个格式为
{salary: (name1, name2)}的新字典? -
@Jean-FrançoisFabre & Chris_Rands 不是真的。我在问题中以薪水为例。数据集很大,我需要搜索各种属性而不仅仅是薪水。在这里创建一个新字典不是一个好主意。 :-)
-
@PaleBlueDot 这只是性能和内存之间的妥协
-
@PaleBlueDot 如果数据集很大,使用真实的数据库在效率方面可能会更好。
标签: python dictionary search iteration