1

だから私は2つの辞書を持っています。

Dictionary 1 looks like this: {'aaien': ['01, 02, 12'], 'aan': ['10']}
Dictionary 2 looks like this: {'01:': ['pronoun'], '02': ['I'],'03': ['we']}

そして今、この 2 つの辞書を組み合わせた関数またはコードを書きたいと思います。結果は次のようになります。

これは私がこれまでに得たものです:

for word, nums in d1.items():
    print word, "->",
    for num in nums:
        if d2.has_key(num):
            print d2[num],
    print
4

3 に答える 3

1

使用collections.defaultdict():

In [60]: dic1= {'aaien': ['01, 02, 12'], 'aan': ['10']}

In [61]: dic2={'01': ['pronoun'], '02': ['I'],'03': ['we']}   #  after fixing '01:'

In [62]: dic3=defaultdict(list)

In [63]: for x,y in dic1.items():
    keys=map(str.strip,y[0].split(","))  #split at ",", and then apply str.strip
    for k in keys:                        
        if k in dic2:                    #if key is present in dic2
            dic3[x].extend(dic2[k])
   ....:             

In [64]: dic3
Out[64]: defaultdict(<type 'list'>, {'aaien': ['pronoun', 'I']})
于 2013-01-24T21:26:00.650 に答える
0

dict.setdefault最初に辞書を修正し、後で使用することをお勧めします。

d1 = {k:map(str.strip,v[0].split(',')) for k,v in d1.iteritems()}
d2 = {k.strip(':'):v for k,v in d2.iteritems()}

result = {}
for k,v in d1.iteritems():
    for i in v:
        if i in d2:
            result.setdefault(k,[]).extend(d2[i])
print result

出力:

{'aaien': ['pronoun', 'I']}
于 2013-01-24T21:36:38.393 に答える
0

最初に口述を「修正」した後(他の人が示唆しているように)、私はそれらがこのようになることを望んでいます。

d1 = {'aaien': ['01', '02', '12'], 'aan': ['10']}
d2 = {'01': 'pronoun', '02': 'I', '03': 'we'}

次にこれを試してください:

print {k: [d2.get(l) for l in v] for k, v in d1.iteritems()}
{'aaien': ['pronoun', 'I', None], 'aan': [None]}

値が代入され、使用可能な値がない場合は None が配置されます。

ルックアップ dict(d2) 値を値のリストにするつもりなら、もっと情報が必要です。リストのリストが必要ですか、それともフラット化されていますか?

すなわち。のルックアップで

d2 = {'01': ['pronoun'], '02': ['I', 'spam'], '03': ['we']}

あなたはこれらのどれが欲しいですか

{'aaien': ['pronoun', 'I', 'spam', None], 'aan': [None]}
{'aaien': ['pronoun', ['I', 'spam'], None], 'aan': [None]}
于 2013-01-24T22:07:16.713 に答える