gpt4 book ai didi

python - 折叠键上的字典

转载 作者:太空宇宙 更新时间:2023-11-03 17:03:29 27 4
gpt4 key购买 nike

我在将 CSV 读入字典并通过按键折叠该字典时遇到问题。我有足够的代码来达到这一点(我有每个州的所有县):

{'County': '02013', 'State': 'Alaska', 'Rate': '28.38692673', 'Zip': '99553'}
{'County': '02013', 'State': 'Alaska', 'Rate': '28.38692673', 'Zip': '99571'}
{'County': '02013', 'State': 'Alaska', 'Rate': '28.38692673', 'Zip': '99583'}
{'County': '02013', 'State': 'Alaska', 'Rate': '28.38692673', 'Zip': '99612'}

但我想要以下结果:

{'County': '02013', 'State': 'Alaska', 'Rate': '28.38692673', 'Zips': ['99553', '99571', '99583', '99612']}

我当前的Python代码是:

with open('../models/mock_data/geography_data.csv', 'r') as f:

result = {}
red = csv.DictReader(f)

我尝试添加以下内容:

for d in red:
result.setdefault(d["County"], [d["State"], d["Rate"]]).append(d["Zip"])

但这会产生如下所示的数据(缺少键)

16079': ['Idaho', '21.02970297', '83802', '83808', '83812', '83837', '83839', '83846', '83849', '83850', '83867', '83868', '83873', '83874']

还有很多其他与使用 iteritems()setdefaultdict() 类似的问题(比如这个: How should I collapse elements in Python? ),但我想我是对这些流程的理解不足以在我的具体情况下实现它们。欢迎任何和所有帮助。

--更新--

好吧,@timegb 对我帮助很大,但我最喜欢使用暴力方法:

with open('../models/mock_data/all_geo_data.csv', 'r') as f:
reader = csv.reader(f)
header = next(reader)
dicts = [dict(zip(header, map(str,row))) for row in reader]

counties = []
result = []

for i in dicts:
zips = []
if i["County"] not in counties:
counties.append(i["County"])
zips.append(i["Zip"])
temp_dict = {"County": i["County"], "State" : i["State"], "Zip" : zips, "Rate" : i["Median_CNC_Labor_Rate"] }
result.append(temp_dict)

for i in dicts:
for j in result:
if i["County"] == j["County"] and i["Zip"] not in j["Zip"]:
j["Zip"].append(i["Zip"])

最佳答案

解决方案如下:

>>> from ast import literal_eval
>>> with open('testfile') as f:
... dicts = [literal_eval(line) for line in list(f)]
... result = {'Zips':[d['Zip'] for d in dicts]}
... result.update(dicts[0])
... del result['Zip']
... del dicts
...
>>> result
{'Zips': ['99553', '99571', '99583', '99612'], 'County': '02013', 'State': 'Alaska', 'Rate': '28.38692673'}

我们 literal_eval 文件中的所有行。结果是第一个字典,其键“Zips”的值设置为所有字典中的 zip 值列表。如果您不需要其他词典,可以在最后发出del dicts

更新

看来您已经通过阅读 csv 文件获得了一个字典列表,我将其称为 dicts。在这种情况下,代码会自行简化:

result = {'Zips':[d['Zip'] for d in dicts]}
result.update(dicts[0])
del result['Zip']

关于python - 折叠键上的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34817645/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com