处理列表中的冗余

gwy*_*n93 1 dictionary tuples list zipper python-3.x

让我们说我有一个州和州的元组列表:

stList = [('NJ', 'Burlington County'),
 ('NJ', 'Middlesex County'),
 ('VA', 'Frederick County'),
 ('MD', 'Montgomery County'),
 ('NC', 'Lee County'),
 ('NC', 'Alamance County')]
Run Code Online (Sandbox Code Playgroud)

对于这些项目中的每一项,我想要将该州与州压缩,如下所示:

new_list = [{'NJ': 'Burlington County'},
{'NJ': 'Middlesex County'},
{'VA': 'Frederick County'},
{'MD': 'Montgomery County'},
{'NC': 'Lee County'},
{'NC': 'Alamance County'}]
Run Code Online (Sandbox Code Playgroud)

我试过这样的东西,但是它不能正常工作(它遍历每个'字母'并单独拉链):

new_list = []
for item in stList:
  d1 = dict(zip(item[0], item[1]))
  new_list.append(d1)
Run Code Online (Sandbox Code Playgroud)

返回:

 [{'N': 'B', 'J': 'u'},
 {'N': 'M', 'J': 'i'},
 {'V': 'F', 'A': 'r'},
 {'M': 'M', 'D': 'o'},
 {'N': 'L', 'C': 'e'},
 {'N': 'A', 'C': 'l'}]
Run Code Online (Sandbox Code Playgroud)

为了使事情变得更复杂,我的最终目标是实际上为每个州(键)提供一个字典列表,其中列出了县(值).如何修复压缩字典,然后将县作为每个州的列表?

final_list = [{'NJ': ['Burlington County', 'Middlesex County']},
{'VA': 'Frederick County'},
{'MD': 'Montgomery County'},
{'NC': ['Lee County', 'Alamance County'}]
Run Code Online (Sandbox Code Playgroud)

Poo*_*lka 7

你得到错误的结果因为zip将字符串视为可迭代.这是预期的行为.

你可能会得到一些接近你想要的东西:

result = dict()
for state, county in stList:
    result.setdefault(state, list()).append(county)

print(result)
Run Code Online (Sandbox Code Playgroud)

结果是包含列表的单个字典.输出:

{'NJ': ['Burlington County', 'Middlesex County'], 'VA': ['Frederick County'], 'MD': ['Montgomery County'], 'NC': ['Lee County', 'Alamance County']}
Run Code Online (Sandbox Code Playgroud)