0

print user_dic[id]正しい結果が表示されますPersonA。これは、IDを手動で入力したときです。

user_stream = {u'2331449': u'PersonB', u'17800013': u'PersonA'}
user_dic= {}
for item in user_stream:
    user_dic[item['id']] = item['name']

id = '17800013'
print user_dic[id]  #returns the right value

user_idただし、 json を反復処理する for ループを通過させようとすると、エラーが発生します: KeyError at 17800013for the line name = user_dic[user_id]. user_dic[id]IDを手動で入力すると機能する理由がわかりuser_dic[user_id]ませんが、入力が同じであってもforループを通過すると機能しません。

#right fql query
fql_query = "SELECT created_time, post_id, actor_id, type, updated_time, attachment FROM stream WHERE post_id in (select post_id from stream where ('video') in attachment AND source_id IN ( SELECT uid2 FROM friend WHERE uid1=me()) limit 100)"
fql_var = "https://api.facebook.com/method/fql.query?access_token=" + token['access_token'] + "&query=" + fql_query + "&format=json"
data = urllib.urlopen(fql_var)
fb_stream = json.loads(data.read())

fb_feed = []
for post in fb_stream:
    user_id = post["actor_id"]
    name = user_dic[user_id]  #this is the line giving me trouble
    title = post["attachment"]["name"]
    link = post["attachment"]["href"]
    video_id = link[link.find('v=')+2 : link.find('v=')+13]
    fb_feed.append([user_id, name, title, video_id])
4

1 に答える 1

0

の必要はありませんuser_dic。あなたが最初の部分でやっていることは単なる冗長な作業であり、あなたはそれを間違っています. あなたuser_streamはすでにあなたが望んでいた形になっています。最初の部分には次の行が含まれている必要があります。

user_stream = {u'2331449': u'PersonB', u'17800013': u'PersonA'}

そして2番目の部分(問題に直面している行)では、次のことを行う必要があります。

name = user_stream[user_id]

KeyError次に直面すると思われる場合dictは、メソッドがあり、キーが見つからない場合.getに返されます。ある場合に返すNone代わりに、値を指定できますNoneKeyError

name = user_stream.get('user_id')
#returns None by default
name = user_stream.get('user_id', '')
#returns empty string now
#on both cases exception will not raised
于 2012-12-01T18:39:45.130 に答える