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

在python中迭代字典列表而不重复?,python,list,dictionary,Python,List,Dictionary,我正在寻找有关如何迭代字典列表、重命名一些键/值对和删除其他键/值对的指导。我有执行必要转换的代码,但它创建了许多新字典的副本 背景如下: 我有一个名为“结果”的词典列表。列表中有3本词典。结果中的每个字典包含5个键/值对,如下所示 {'lat': 36.88773, 'site_description': blah blah, 'id': 2, 'long': -75.985534, 'site_name': 62nd street} 我正试图从列表中的每一本词典中创建一本新

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

背景如下:

我有一个名为“结果”的词典列表。列表中有3本词典。结果中的每个字典包含5个键/值对,如下所示

{'lat': 36.88773, 
 'site_description': blah blah, 
 'id': 2, 
 'long': -75.985534, 
 'site_name': 62nd street}
我正试图从列表中的每一本词典中创建一本新词典。我要执行以下更改:

  • 将“long”重命名为“lng”
  • 将“站点描述”重命名为“信息框”
  • 删除“id”
下面的代码将成功地迭代字典列表并转换每一个字典。然而,我没有仅仅创建3个新词典,而是创建了15个。每本新词典有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
谢谢你的建议

for dict in results:
   for val in dict.items():
       new_markers.append({ … dict comprehension … })
这里有两个循环,第二个循环迭代字典项,尽管在以后的字典理解中您会这样做。特别是因为您也在那里通过循环
dict.items()
检索
val

所以只要跳过这一个循环,你就可以开始了

for dict in results:
   new_markers.append({rename.get(key, key) : val for key, val 
           in dict.items() if key not in black_list})

理解列表和dict是一种方法:

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]
您可以尝试以下方法:

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

谢谢,我也会测试一下。谢谢你的快速回复!