【发布时间】:2016-01-07 16:20:01
【问题描述】:
我将列表作为字典值嵌套在另一个名为 data 的字典中。我一直在尝试找到一种快速的方法来从特定的嵌套键中获取所有唯一列表项,例如key1 或key2。
我想出了以下功能,这似乎不是很有效。有什么想法可以加快速度并变得更加 Pythonic 吗?
Python 函数
def get_uniq_by_value(data, val_name):
results = []
for key, value in data.iteritems():
for item in value[val_name]:
if item not in results:
results.append(item)
return results
示例数据
data = {
"top1": {
"key1": [
"there is no spoon", "but dictionaries are hard",
],
"key2": [
"mad max fury road was so good",
]
},
"top2": {
"key1": [
"my item", "foo bar"
],
"key2": [
"blah", "more junk"
]
},
【问题讨论】:
-
不,结果中的顺序根本不重要
-
你考虑过
set吗?如果您从不使用key,为什么还要迭代iteritems?请注意,如果其中一个嵌套字典没有val_name键,您将使用KeyError崩溃。 -
好点!此外,每个嵌套字典中的数据将始终包含
key1和key2。如果没有项目,则列表留空。我之前没有真正使用过set...我可以附加到它并且只保留唯一值吗? -
@deadbits 是的,
set.add会悄悄地忽略重复项
标签: python dictionary nested