在python中迭代一个字典列表而不重复?

时间:2017-09-29 14:30:33

标签: python list dictionary

我正在寻找有关如何迭代字典列表,重命名一些键/值对以及删除其他字典的指导。我有执行必要转换的代码,但它创建了许多新字典的副本。

以下是背景资料:

我有一个名为"结果"的词典列表。列表中有3个词典。结果中的每个字典包含5个键/值对,如...

{'lat': 36.88773, 
 'site_description': blah blah, 
 'id': 2, 
 'long': -75.985534, 
 'site_name': 62nd street}

我正在尝试从列表中的每个字典中创建一个新字典。我想执行以下更改:

  • 重命名' long'到' lng'
  • 重命名' site_description'到' infobox'
  • 删除' id'

我在下面的代码将成功迭代字典列表并转换每个字典。但是,我创建了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

感谢您的任何建议!

3 个答案:

答案 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}]