0

特定のリストに値を追加したいリストの辞書があります...

d = {'a': [4, 2], 'b': [3, 4], 'c': [4, 3], 'd': [4, 3], 'e': [4], 'f': [4], 'g': [4]}

長さの最も短いリストの 1 つだけに番号 2 を追加したいと考えています。

def gsl(x):
    return [k for k in x.keys() if len(x.get(k))==min([len(n) for n in x.values()])]

電話した後

>>> gsl(d)
['e', 'g', 'f']

'e'したがって、この場合、辞書のリストに番号 2 を追加して、それを作成します[4,2](順序は関係ありません。

結果は

>>> d['e']
[4,2]

私はもう試した

for i in d:
    if gsl(d)[0] == i: #gets the first key with the smallest value 
        d[i].append(2) # if equal, adds 2 to the dictionary value that matches

ただし、2'e', 'g', に追加されます'f'

前もって感謝します!

4

4 に答える 4

4
>>> d = {'a': [4, 2], 'b': [3, 4], 'c': [4, 3], 'd': [4, 3], 'e': [4], 'f': [4], 'g': [4]}
>>> smallest = min(d, key=lambda k: len(d[k]))
>>> d[smallest].append(2)
>>> d
{'a': [4, 2], 'c': [4, 3], 'b': [3, 4], 'e': [4, 2], 'd': [4, 3], 'g': [4], 'f': [4]}
于 2012-07-31T00:32:08.810 に答える
0

Python 2.7以降を使用している場合は、次のビューを使用できます。

>>> d = {'a': [4, 2], 'b': [3, 4], 'c': [4, 3], 'd': [4, 3], 'e': [4], 'f': [4], 'g': [4]}
>>> min(d.viewitems(), key=lambda (k, v): len(v))[1].append(2)
>>> d
{'a': [4, 2], 'c': [4, 3], 'b': [3, 4], 'e': [4, 2], 'd': [4, 3], 'g': [4], 'f': [4]}

古いバージョンを使用している場合は、iteritemsを使用できます。

>>> d = {'a': [4, 2], 'b': [3, 4], 'c': [4, 3], 'd': [4, 3], 'e': [4], 'f': [4], 'g': [4]}
>>> min(d.iteritems(), key=lambda (k, v): len(v))[1].append(2)
>>> d
{'a': [4, 2], 'c': [4, 3], 'b': [3, 4], 'e': [4, 2], 'd': [4, 3], 'g': [4], 'f': [4]}
于 2012-07-31T04:56:24.313 に答える
0

どうですか:

d[gsl(d)[0]].append(2)

gsl(d)最小限の長さのキーのリストを0取得し、最初のキーを取得してから、そのキーのリストを取得して追加2します。

于 2012-07-31T00:31:00.293 に答える
0

あなたの答えの問題は、「e」に要素を挿入した後、「最小長リストのキー」の一部ではなくなるため、次の反復で ['f', 'g'] が返されることです。

それに対する簡単な修正の 1 つは、次のようにループを中断することです。

for i in d:
    if gsl(d)[0] == i:
        d[i].append(2)
        break

しかし、これはあなたが望むことを行うには非常に非効率的な方法であり、d が空の場合は失敗します。

于 2012-07-31T00:36:15.470 に答える