我想尽可能高效地遍历键值对列表。目的是遍历数据集以找到包含与我要查找的代码对应的键的键值对,这嵌套在另一个 for 循环中,循环遍历一组代码。 我的 Logo 对象看起来像:
data_set = [{'key1': 'value'}, {'key2': 'value2'}, {'key3': 'value3'}, ]
codes = ['key1', 'key2', 'key3']
其中key对应的是code,value是我要提取的数据
for code in codes:
data = ''
for idx, data_obj in enumerate(data_set):
for (key, value) in data_obj.items():
if key == code:
data = value
break
if data != '':
del data_set[idx]
break
do_something_with_data(data)
目前我的方法运行良好且相当快,但我忍不住想知道是否有更清洁/更快的方法来做这件事
请您参考如下方法:
如果您有一个 dict 和所有键,这将是微不足道的,可以用dict.pop(key[,default]) 完成.
在列表中的几个单键字典中使用分离键是一种非常糟糕的数据结构选择 - 您应该将它们整合到一个大字典中以启用 O(1) 访问键,而不是事后操纵您的列表成形.
具有多个键的 dict 的解决方案,如果它们在您的代码列表中,则会从中消失:
data_set = {'key1': 'value', 'key2': 'value2', 'key3': 'value3'} # use a dict
codes = ['key1', 'key2', 'key3']
for code in codes:
data = data_set.pop(code, None) # get value & remove key, return None if not there
if data:
print(data) # do something with the data
print(data_set)
输出:
value
value2
value3
{}
从第三方获取数据时:
ds = [{'key1': 'value'}, {'key2': 'value2'}, {'key3': 'value3'}, ]
data_set = { key:value for x in ds for key,value in x.items() }
print(data_set)
输出:
{'key1': 'value', 'key2': 'value2', 'key3': 'value3'}
