我在Python中有一本字典,如下所示:
dicts = [{'uid':'12345', 'markets':'['UK', 'US']'},
{'uid':'55644', 'markets':'['IN', 'SG', 'IE']'}]我真正需要的是为“市场”列表中的每一项,为词典列表中的每一本词典制作的任何词典的副本。应该是这样的:
dicts = [{'uid':'12345', 'markets':'['UK']'},
{'uid':'12345', 'markets':'['US']'},
{'uid':'55644', 'markets':'['IN']'},
{'uid':'55644', 'markets':'['IE']'},
{'uid':'55644', 'markets':'['SG']'}]有人能帮我理解Python中解决这个问题的最佳方法吗?
发布于 2016-03-16 15:21:17
下面的代码将创建一个字典列表:
dicts = [{'uid':'12345', 'markets':['UK', 'US']},
{'uid':'55644', 'markets':['IN', 'SG', 'IE']}]
def flatten(lists):
res = []
for d in lists:
for market in d['markets']:
res.append({'uid': d['uid'], 'markets': [market]})
return res
print flatten(dicts)
# [{'markets': ['UK'], 'uid': '12345'}, {'markets': ['US'], 'uid': '12345'},
# {'markets': ['IN'], 'uid': '55644'}, {'markets': ['SG'], 'uid': '55644'},
# {'markets': ['IE'], 'uid': '55644'}]代码将遍历原始列表中的字典。对于每个字典,代码将在市场上迭代,对于每个市场,它将为结果列表添加一个新字典。除了print之外,该代码将同时在Python2和Python3上工作。
发布于 2016-03-16 15:23:28
您可以(python 3)尝试:
dicts = [{'uid':'12345', 'markets':['UK', 'US']},
{'uid':'55644', 'markets':['IN', 'SG', 'IE']}]
def _split_dict(dict_):
for country in dict_["markets"]:
yield {'markets': [country], 'uid': dict_['uid']}
def split_dicts(dicts):
for dict_ in dicts:
yield from _split_dict(dict_)
print(list(split_dicts(dicts)))
# [{'uid': '12345', 'markets': ['UK']}, {'uid': '12345', 'markets': ['US']}, {'uid': '55644', 'markets': ['IN']}, {'uid': '55644', 'markets': ['SG']}, {'uid': '55644', 'markets': ['IE']}]https://stackoverflow.com/questions/36039723
复制相似问题