2016-03-16 29 views
0

我在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中最好的方法来解决这个问题吗?

+0

榜上有名错字的不应该'“[”英国之前的报价”, 'US']''''''英国','美国']' – danidee

回答

2

下面的代码将创建一个字典列表:

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的代码将工作无论在Python 2和Python 3的

+0

谢谢!如果有15个以上的密钥,写入追加行的最佳方式是什么?如果只有“市场”领域发生变化,那么它们仍然是最好的方式吗? –

+1

您可以在内部循环中复制当前字典,将'market'分配给'copy ['markets']'并附加复制结果列表。 – niemmi

0

你可以(蟒蛇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']}] 
相关问题