如何加入词典

2024-05-28 20:46:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有数据

stat=[{'state': {'europe': ['germany', 'england']}}, 
      {'state': {'europe': ['french', 'netherland']}},
      {'state': {'asian': ['japan', 'china']}}]

问:如何在列表之间加入? 给定结果:

^{pr2}$

我使用的是pythons60和python2.2


Tags: 数据列表statstatefrencheuropechinagermany
3条回答

天真的尝试:

r={}
for d in stat:
    for k,v in d.iteritems():
        nd = r.setdefault(k,[])
        for tdk,tdv in v.iteritems():
            q = filter(lambda x: tdk in x.iterkeys(),nd)
            if not q:
                q = {tdk:[]}
                nd.append(q)
            else: q = q[0]
            q[tdk]+=tdv


print r
# prints {'state': [{'europe': ['germany', 'england', 'french', 'netherland']}, {'asian': ['japan', 'china']}]}

在python 2.2中:

stat2 = {}
for s in stat:
    for c in s.values():
        for k, v in c.items():
            if k in stat2:
                stat2[k] += v
            else:
                stat2[k] = v  # perhaps copying here

stat2
{'asian': ['japan', 'china'],
 'europe': ['germany', 'england', 'french', 'netherland']}

如果您使用的是python>;2.4,则可以使用defaultdict:

^{pr2}$

如果你真的想:

{'state': [dict(stat2)]}
{'state': [{'asian': ['japan', 'china'],
   'europe': ['germany', 'england', 'french', 'netherland']}]}

考虑升级你的python版本,2.2是2001年发布的。。。!

下面是一个简单的答案,使用Python 2.2中提供的构造,没有什么特别的:

ans = {}
for d1 in stat:
    for k1, v1 in d1.items():
        if k1 not in ans:
            ans[k1] = []
        for k2, v2 in v1.items():
            for d2 in ans[k1]:
                if k2 in d2.keys():
                    d2[k2].extend(v2)
                    break
            else:
                ans[k1].append({k2:v2})

结果如预期:

^{pr2}$

相关问题 更多 >

    热门问题