我正在寻找有关如何迭代字典列表,重命名一些键/值对以及删除其他字典的指导。我有执行必要转换的代码,但它创建了许多新字典的副本。
以下是背景资料:
我有一个名为"结果"的词典列表。列表中有3个词典。结果中的每个字典包含5个键/值对,如...
{'lat': 36.88773,
'site_description': blah blah,
'id': 2,
'long': -75.985534,
'site_name': 62nd street}
我正在尝试从列表中的每个字典中创建一个新字典。我想执行以下更改:
我在下面的代码将成功迭代字典列表并转换每个字典。但是,我创建了15个新词典而不是仅创建3个新词典。每个新词典有5个重复。
>>> black_list = {"id"}
>>> rename ={"long":"lng", "site_description":"infobox"}
>>> new_markers = []
>>> for dict in results:
for val in dict.items():
new_markers.append({rename.get(key, key) : val for key, val
in dict.items() if key not in black_list})
>>> print new_markers
感谢您的任何建议!
答案 0 :(得分:1)
val
你有两个循环,第二个遍历字典项,尽管你稍后会在字典理解中做到这一点。特别是因为您还在dict.items()
循环检索for dict in results:
new_markers.append({rename.get(key, key) : val for key, val
in dict.items() if key not in black_list})
。
所以,跳过那一个循环,你应该好好去。
SELECT `day`, `data` FROM `clients`
INNER JOIN `days`
ON `days`.`client_id`=`clients`.`id`
WHERE `clients`.`type` = 'Individual'
答案 1 :(得分:0)
理解列表和词典是一种方法:
new_markers = [{rename[k] if k in rename else k: v for k, v in d.items() if k not in black_list} for d in results]
答案 2 :(得分:0)
你可以试试这个:
s = [{'lat': 36.88773, 'site_description': "blah blah", 'id': 2, 'long': -75.985534, 'site_name': "62nd street"}, {'lat': 36.88773, 'site_description': "blah blah", 'id': 4, 'long': -35.985534, 'site_name': "26nd street"}, {'lat': 36.88773, 'site_description': "blah blah", 'id': 2, 'long': -75.985534, 'site_name': "62nd street"}]
new_s = [{"lng" if a == "log" else 'infobox' if a == 'site_description' else a if a != "id" else "pass":b for a, b in i.items()} for i in s]
final_list = []
for i in new_s:
del i["pass"]
final_list.append(i)
输出:
[{'long': -75.985534, 'infobox': 'blah blah', 'site_name': '62nd street', 'lat': 36.88773}, {'long': -35.985534, 'infobox': 'blah blah', 'site_name': '26nd street', 'lat': 36.88773}, {'long': -75.985534, 'infobox': 'blah blah', 'site_name': '62nd street', 'lat': 36.88773}]