4

私はデータを持っています

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

質問: リストを結合するにはどうすればよいですか? 与えられた結果:

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

私はPython 2.2でPython S60を使用しています

4

3 に答える 3

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']}]}
于 2013-06-10T01:18:17.773 に答える
1

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})

結果は期待どおりです。

ans
=> {'state': [{'europe': ['germany', 'england', 'french', 'netherland']},
              {'asian' : ['japan', 'china']}]}
于 2013-06-10T01:20:37.297 に答える
1

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 を使用できます。

from collections import defaultdict
stat2 = defaultdict(list)

for s in stat:
    for c in s.values():
        for k, v in c.items():
            stat2[k] += v

stat2
defaultdict(<type 'list'>, {'europe': ['germany', 'england', 'french', 'netherland'], 'asian': ['japan', 'china']})

そして、あなたが本当にしたい場合:

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

Python のバージョンをアップグレードすることを検討してください。2.2 は 2001 年にリリースされました...!

于 2013-06-10T01:04:07.640 に答える