0

文字のリストがあり、それぞれをリスト内の出現回数にマップしたいとしましょう。次のコードはこれを実現します。

characters = ['a','b','c','a']
d = {}
for ch in characters:
   d[ch] = d.get(ch,0) + 1
return d

ここで、各文字をリスト内の出現回数にマップする代わりに、1 のリストにマップしたいとします。ここで、各 1 はリスト内の出現を表します。たとえば、{a:[1,1], b:[1], c:[1]} のようなものです。同じ形式を使用していますが、機能しません。誰かが理由を説明できますか?

characters = ['a','b','c','a']
d = {}
for ch in characters:
   d[ch] = d.get(ch,[]).append(1)
#print type(d['a'])
return d

for ループで .append() を削除すると、印刷タイプ (d['a']) が「リスト」を返しますが、AttributeError: 'NoneType' object has no attribute 'append' が発生します。ありがとう!

4

5 に答える 5

2
characters = ['a','b','c','a']
d = {}
for ch in characters:
   d[ch] = d.get(ch,[]).append(1)
#print type(d['a'])
return d

dict.getキーの値を返し、chそれが存在しない場合は、指定したデフォルト値、つまり[]作成したリストを返します。d.getとにかく、値を設定せず、値を 1 つしか返さないため、混乱する可能性があると思います。次に1、このリストに追加します。.appendはインプレース操作であるため、期待どおりに追加後のリストを返すことはありません。単に、Noneあなたが持っている方法で使用することは想定されていないことを示すために返されます。代わりにできることは

d.setdefault(ch, []).append(1)

これはあなたが期待することを行います;) このクレイジーな構文を避けるために、次のcollections.defaultdictようなものを利用できます:

d = defaultdict(list)
d[ch].append(1)

はるかにきれいに見えます

于 2013-04-12T07:46:06.127 に答える
0

この行は、関数によって返された値が Noneにd[ch] = d.get(ch,[]).append(1)設定されます。代わりにこれを行います:d[ch]append

d[ch] = d.get(ch, [])
d[ch].append(1)
于 2013-04-12T07:50:00.417 に答える
0

これは私の提案する解決策です:

characters = ['a','b','c','a']
d = {}
for ch in characters:
    d.setdefaultappend(ch, []).append(1)
return d
于 2013-04-12T09:11:10.323 に答える
-1

Pythondir関数を使用する

list追加メソッドがあります

dist追加メソッドがありません

>>> characters = []
>>> d = {}
>>> dir(characters)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', 
'__delslice__', '__doc__', '__eq__', '__format__', '__ge__', 
'__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', 
'__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', 
'__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', 
'__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', 
'__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append',
'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

>>> dir(d)
['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__doc__', 
'__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', 
'__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', 
'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', 
'__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 
'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'pop', 
'popitem', 'setdefault', 'update', 'values', 'viewitems', 'viewkeys', 'viewvalues']
于 2013-04-12T07:33:31.547 に答える