4

質問の再投稿について申し訳ありません...私は最初にこの質問を編集する必要がありました。modsの新しいフラグを付けました。ご迷惑おかけして申し訳ありません

要件が変更されたため、質問を書き直さなければなりませんでした。

私は次のような辞書を持っています:

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

辞書dで最小の長さに関連付けられているキーと、最大値を持つキーを取得したいと思います。

この場合、最小の長さ(このディクショナリ内のリストの最小の長さ)のキーは

'e, 'f', 'g'

そして、最大の値(各リストの整数の合計)を持つものは、

'b' 'c'

私が試してみました

min_value = min(dict.itervalues())
min_keys = [k for k in d if dict[k] == min_value]

しかし、それは私が望む結果を私に与えません。

何か案は?

ありがとう!

4

4 に答える 4

1

引数を使用min()して、key=必要な方法で比較するキー関数を指定できます。

d = {'a': ['1'], 'b': ['1', '2'], 'c': ['2'], 'd':['1']}

min_value = min(d.values())
min_list = [key for key, value in d.items() if value == min_value]
max_len = len(max(d.values(), key=len))
long_list = [key for key, value in d.items() if len(value) == max_len]

print(min_list)
print(long_list)

ノート:

dict0)変数名として使用しないでください。これはディクショナリのクラスの名前であり、変数名として使用する場合は「シャドウ」します。dここの名前に使っただけです。

1)min_value簡単でした。関数を使用する必要はありませんkey=

2)関数 をmax_len使用して最長値を見つけます。key=len()

于 2012-07-30T21:15:58.107 に答える
1

問題は、リストに文字列 ( '2') が含まれていて、整数 ( 2) が含まれていないことです。引用符を省略するか、次を使用します。

min_value = min(min(map(int, v) for v in dct.values()))
min_keys = [k for k,v in d.items() if min_value in map(int, v)]

同様に、最大長のキーを計算するには:

max_length = max(map(len, dct.values()))
maxlen_keys = [k for k,v in d.items() if max_length == len(v)]

dictまた、変数名として使用するのは悪い考えdictです。

于 2012-07-30T21:16:02.597 に答える
1

ソートとラムダを使用するのはどうですか?

#!/usr/bin/env python
d = {'a': ['1'], 'b': ['1', '2'], 'c': ['8', '1'], 'd':['1'], 'e':['1', '2', '3'], 'f': [4, 1]}
sorted_by_sum_d = sorted(d, key=lambda key: sum(list(int(item) for item in d[key])))
sorted_by_length_d = sorted(d, key=lambda key: len(d[key]))
print "Sorted by sum of the items in the list : %s" % sorted_by_sum_d
print "Sorted by length of the items in the list : %s" % sorted_by_length_d

これは次のように出力されます。

Sorted by sum of the items in the list : ['a', 'd', 'b', 'f', 'e', 'c']
Sorted by length of the items in the list : ['a', 'd', 'c', 'b', 'f', 'e']

最初の'd'辞書を変更したことに注意してください(機能していることを確認するため)

次に、合計が最大の項目が必要な場合は、sorted_by_sum_dリストの最後の要素を取得します。

(ただし、これがあなたが望むものかどうかはわかりません)

編集

リストが常に整数のリスト (またはlong, float... などの数値型) になることを確認できる場合は、文字列を整数にキャストする必要はありません。変数の計算は、sorted_by_sum_d次を使用して簡単に実行できます。

d = {'a': [1], 'b': [1, 2], 'c': [8, 1], 'd':[1], 'e':[1, 2, 3], 'f': [4, 1]}
sorted_by_sum_d = sorted(d, key=lambda key: sum(d[key]))
于 2012-07-30T22:35:38.210 に答える