0

Unicode キーを持つ辞書があり、内部の要素を操作できないようです

state_sentiment = {u'WA': [0.0], u'DC': [-2.0, 0.0], u'WI': [0.0, 0.0, 0.0], u'WV': [0.0], u'FL': [2.0, 0.0, -2.0, 0.0, 0.0, 1.0],  u'OR': [6.0]}
for k,v in state_sentiment:
        max_score = -10.00
        happiest_state = ''
        current_score = float(sum(v))/len(v)
        if current_score > max_score:
            max_score = current_score
            happiest_state = state_sentiment[k]

エラーが発生します

Traceback (most recent call last):
  File "happiest_state.py", line 61, in <module>
    processing()
  File "happiest_state.py", line 55, in processing
    readtweets(tweet_file, sent_dict)
  File "happiest_state.py", line 38, in readtweets
    current_score = float(sum(v))/len(v)
TypeError: unsupported operand type(s) for +: 'int' and 'unicode'

vからに切り替えてstate_sentiment[k]も、まだエラーが発生する

Traceback (most recent call last):
  File "happiest_state.py", line 59, in <module>
    processing()
  File "happiest_state.py", line 53, in processing
    readtweets(tweet_file, sent_dict)
  File "happiest_state.py", line 36, in readtweets
    current_score = float(sum(state_sentiment[k]))/len(state_sentiment[k])
KeyError: u'W'
4

3 に答える 3

2

辞書を反復処理すると、キーが返されます。あなたがしたい:

for k, v in state_sentiment.iteritems():
于 2013-05-15T18:21:30.680 に答える
1

辞書を反復処理する場合、実際にはそのキーを反復処理します。

>>> for a in {'b': 2, 'c': 3}:
...     print a
...
c
b

for k, v in state_sentiment実際には各キー名が個々の文字に分割されるため、コードは実行されます (ただし、正しく機能しません) 。

>>> k, v = 'AB'
>>> k
'A'
>>> v
'B'

代わりにやりたいことは、キーと値のアイテムのペアを反復処理することです:

for k, v in state_sentiment.items():
    ...

ループをスキップして、次のようにすることもできますmax()

def key_func(state):
    return sum(state[1]) / float(len(state[1]))

happiest_state = max(state_sentiment.items(), key=key_func) 
于 2013-05-15T18:27:37.763 に答える
0
for k,v in state_sentiment.items():

あなたが望むものです...それ以外の場合は、 k="D",v="C" になります

print ["K:%s,V:%s"%(k,v) for k,v in state_sentiment]

辞書を繰り返し処理してもキーしか得られないため (この場合、たまたま 2 文字の長さになります (それぞれ k,v に割り当てられます))。

于 2013-05-15T18:21:12.173 に答える