我有一本很深的字典,像这样:
myDict = { '123456': {
'348adbd39r' : {
'LONDON': {
'c_name': 'abc',
'acct': '84720'
},
'PARIS': {
'c_name': 'xyz',
'acct': '73642'
}
},
'2862aef3' : {
'NYC': {
'c_name': 'hhdls3',
'acct': '92742'
}
},
'82gfg24' : {
'NYC': {
'c_name': 'hquer',
'acct': '34567'
},
'PARIS': {
'c_name': 'ljad',
'acct': '93742'
}
}
}
我想根据城市的名字来“聚合”它。输出应如下所示:
outDict = {
'LONDON': {
'c_name': ['abc'],
'acct': ['84720']
},
'PARIS': {
'c_name': ['xyz', 'ljad'],
'acct': ['73642', '93742']
},
'NYC': {
'c_name': ['hhdls3', 'hquer'],
'acct': ['73642', '34567']
}
}
我就是这么做的:
cust_fields = ['c_name', 'acct']
field_dict = {field: [] for field in cust_fields}
aggregated_dict = {}
city_names = ['LONDON', 'PARIS', 'NYC']
for city in city_names:
aggregated_dict[city] = field_dict
for id, an_dict in myDict.iteritems():
for alphaNum, city_dict in an_dict.iteritems():
for city, acct_dict in city_dict.iteritems():
for field, val in acct_dict.iteritems():
aggregated_dict[city][field].append(val)
但是,上面所说的是更新所有城市的字段值…而不仅仅是它正在处理的特定城市。不知道逻辑哪里错了。任何帮助(无论是纠正我的错误或任何新的逻辑…)。你知道吗
谢谢!你知道吗
可以使用递归:
输出:
你的问题是你在给你的
city_names
循环中的field_dict
赋值给aggregated_dict[city]
,这只是给每个城市分配相同的字典。当您更新任何引用(对于任何城市)时,所有引用都会更新。你知道吗一个简单的解决办法就是改变
收件人:
对于这种类型的聚合,我还要看collections.defaultdict。你知道吗
相关问题 更多 >
编程相关推荐