Python - 增加字典值的函数
Python - function to increment dictionary values
从两个嵌套开始 dictionaries
:
p1 = {'user1': {u'Codex': 1.0, u'High And Dry': 1.0, u'Hey': 1.0, u'O': 1.0, u'Videotape': 1.0, u'Pyramid Song': 1.0}}
和
p2 = {'user1': {u'Codex': 1.0, u'High And Dry': 1.0, u'Hey': 1.0, u'O': 1.0, u'Videotape': 1.0, u'Pyramid Song': 1.0,
u'x': 1.0, u'y': 1.0, u'w': 1.0, u'z': 1.0}}
我正在获取两个外部 keys
playlist1 = p1['user1'].keys()
playlist2 = p2['user1'].keys()
为了定义增量 function
其目的是增加重复歌曲的计数,并保持所有其他歌曲不受影响,我写道:
def incremented_playlist(playlist1, playlist2):
playlist3 = {'user1':{}}
for song in playlist2:
if song in playlist1:
playlist3['user1'][song] = 2.0
else:
playlist3['user1'][song] = 1.0
return playlist3
这会为示例打印所需的 output
:
print incremented_playlist(playlist1, playlist2)
即
{'user1': {u'Pyramid Song': 2.0, u'Videotape': 2.0, u'High And Dry': 2.0, u'Hey': 2.0, u'O': 2.0, u'Codex': 2.0, u'w': 1.0, u'y': 1.0, u'x': 1.0, u'z': 1.0}}
但是如何在现在只有赋值的情况下构建增量部分?
有没有built-in
python
class
哪个increment
更好?
如果我对你的理解正确的话,这样的东西应该有用。您有 2 个播放列表,并且想要对不同播放列表中的收视率求和。因此,如果我在两个播放列表中都给某些歌曲评分 1,则总和将为 2,如果我只给其中一个播放列表,则总和将为 1。如果评分不同于 1,此解决方案也将起作用。
p1 = {'user1': {u'Codex': 1.0, u'High And Dry': 1.0, u'Hey': 1.0, u'O': 1.0, u'Videotape': 1.0, u'Pyramid Song': 1.0}}
p2 = {'user1': {u'Codex': 1.0, u'High And Dry': 1.0, u'Hey': 1.0, u'O': 1.0, u'Videotape': 1.0, u'Pyramid Song': 1.0,
u'x': 1.0, u'y': 1.0, u'w': 1.0, u'z': 1.0}}
total = dict()
for user, ratings in p1.items():
this_user_ratings = ratings
if user in p2:
ratings2 = p2[user]
for k, v in ratings2.items():
this_user_ratings[k] = this_user_ratings.get(k, 0) + v
total[user] = this_user_ratings
print(total)
或者,如果您需要一个适用于任意数量的词典(播放列表)的解决方案,您可能希望使用类似这样的方法:
all_playlists = [p1, p2]
total = dict()
for playlist in all_playlists:
for user, ratings in playlist.items():
total.setdefault(user, dict())
for k, v in ratings.items():
total[user][k] = total[user].get(k, 0) + v
从两个嵌套开始 dictionaries
:
p1 = {'user1': {u'Codex': 1.0, u'High And Dry': 1.0, u'Hey': 1.0, u'O': 1.0, u'Videotape': 1.0, u'Pyramid Song': 1.0}}
和
p2 = {'user1': {u'Codex': 1.0, u'High And Dry': 1.0, u'Hey': 1.0, u'O': 1.0, u'Videotape': 1.0, u'Pyramid Song': 1.0,
u'x': 1.0, u'y': 1.0, u'w': 1.0, u'z': 1.0}}
我正在获取两个外部 keys
playlist1 = p1['user1'].keys()
playlist2 = p2['user1'].keys()
为了定义增量 function
其目的是增加重复歌曲的计数,并保持所有其他歌曲不受影响,我写道:
def incremented_playlist(playlist1, playlist2):
playlist3 = {'user1':{}}
for song in playlist2:
if song in playlist1:
playlist3['user1'][song] = 2.0
else:
playlist3['user1'][song] = 1.0
return playlist3
这会为示例打印所需的 output
:
print incremented_playlist(playlist1, playlist2)
即
{'user1': {u'Pyramid Song': 2.0, u'Videotape': 2.0, u'High And Dry': 2.0, u'Hey': 2.0, u'O': 2.0, u'Codex': 2.0, u'w': 1.0, u'y': 1.0, u'x': 1.0, u'z': 1.0}}
但是如何在现在只有赋值的情况下构建增量部分?
有没有built-in
python
class
哪个increment
更好?
如果我对你的理解正确的话,这样的东西应该有用。您有 2 个播放列表,并且想要对不同播放列表中的收视率求和。因此,如果我在两个播放列表中都给某些歌曲评分 1,则总和将为 2,如果我只给其中一个播放列表,则总和将为 1。如果评分不同于 1,此解决方案也将起作用。
p1 = {'user1': {u'Codex': 1.0, u'High And Dry': 1.0, u'Hey': 1.0, u'O': 1.0, u'Videotape': 1.0, u'Pyramid Song': 1.0}}
p2 = {'user1': {u'Codex': 1.0, u'High And Dry': 1.0, u'Hey': 1.0, u'O': 1.0, u'Videotape': 1.0, u'Pyramid Song': 1.0,
u'x': 1.0, u'y': 1.0, u'w': 1.0, u'z': 1.0}}
total = dict()
for user, ratings in p1.items():
this_user_ratings = ratings
if user in p2:
ratings2 = p2[user]
for k, v in ratings2.items():
this_user_ratings[k] = this_user_ratings.get(k, 0) + v
total[user] = this_user_ratings
print(total)
或者,如果您需要一个适用于任意数量的词典(播放列表)的解决方案,您可能希望使用类似这样的方法:
all_playlists = [p1, p2]
total = dict()
for playlist in all_playlists:
for user, ratings in playlist.items():
total.setdefault(user, dict())
for k, v in ratings.items():
total[user][k] = total[user].get(k, 0) + v