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)
你得到错误的结果因为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)