2

「追加」と「設定」を使用して、辞書キーの値としてリストを入力しています。問題は、私の辞書のキーが文字列であることです。したがって、「追加」を使用してリストを値として持つことはできません。したがって、「追加」と「設定」を使用して値に追加しました。ただし、リスト内での重複は許可されません。重複を許可するようにコードを変更するにはどうすればよいですか? コードの私の部分は以下の通りです:

if myKey in myDict.keys():
    myDict[myKey].add(value)
else:  
    myDict[mykey] = set([value])  

ここで、値は float です。

たとえば、myKey が「abcd」で、その値リストが [1.5,2.5,3.5,1.5] の場合、上記のコードを使用すると、['abcd': 1.5,2.5,3.5] のみを取得できます。追加を使用せずに重複値を許可するようにコードを変更するにはどうすればよいですか? 前もって感謝します。

4

3 に答える 3

4

私の辞書キーは文字列です。したがって、「追加」を使用してリストを値として持つことはできません

そうではありません。文字列をキーとして、リストを値として持つことができます。

myDict = {}
myDict.setdefault(myKey, []).append(value)

の 2 番目の引数myDict.setdefault(myKey, [])はデフォルト値です。が にない場合myKeymyDict、デフォルト値が返されます。(ここにドキュメントへのリンクがあります。)

または、collections.defaultdictを使用できます。

import collections
myDict = collections.defaultdict(list)
myDict[myKey].append(value)

通常の とは異なり、が であるdict場合、に ないキーに対して空のリストを返します。myDictdefaultdictmyDict[anyKey]myDict


于 2013-07-10T21:29:02.800 に答える
1

に重複する値を格納することはできませんset。それが要点です。

setまた、秩序を維持することを期待しているようです。それはしません。小さいケースだと思われるかもしれませんが、それに依存するコードを書くと壊れてしまいます。

では、 に似ているsetが、値の重複を許可し、順序を保持する型とは何でしょう? list.

キーのタイプは、使用できる値のタイプとは関係ありません。たとえそうだったとしても、その理由setを理解するのは難しく、list別の方法で行動するでしょう. その場合。

そう:

if myKey in myDict.keys():
    myDict[myKey].append(value)
else:  
    myDict[mykey] = [value]

次のいずれかを使用して、全体を単純化できることに注意してくださいsetdefault

myDict.setdefault(myKey, []).append(value)

… またはcollections.defaultdict:

myDict = defaultdict(list)
# ...
myDict[myKey].append(value)
于 2013-07-10T21:29:49.370 に答える