python - 如何从当前字典返回具有列表值的新字典?
问题描述
现在,我很难弄清楚如何获得以下输出。
期望的输出:
{'Bobby': [set(), set(), set(), {'movie_2'}, set(),{'movie_1'}],
'Carren': [set(), set(), {'movie_4'}, {'movie_2'}, set(), {'movie_1'}],
'Deric': [set(), {'movie_1'}, set(), {'movie_2'}, set(),{'movie_3'}],
'Alec': [set(), {'movie_1'}, {'movie_3'}, set(), set(), {'movie_4'}] }
我正在使用的字典:
d = {'movie_1': {('Bobby', 5), ('Carren', 5), ('Alec', 1), ('Deric', 1)},
'movie_2': {('Carren', 3), ('Deric', 3), ('Bobby', 3)},
'movie_3': {('Alec', 2), ('Deric', 5)},
'movie_4': {('Carren', 2), ('Alec', 5)} }
在每个值内部,元组代表(人,职位)。
因此,使用字典d
时,当您查看键'movie_1'
时,第一个值是('Bobby', 5)
。
然后将键'movie_1'
放入列表中的第 5 个索引中。
我到目前为止的代码:
我创建了一个包含 6 项的列表set()
,但我不完全确定从这里做什么才能获得所需的输出。
from collections import defaultdict
d = {
'movie_1': {('Bobby', 5), ('Carren', 5), ('Alec', 1), ('Deric', 1)},
'movie_2': {('Carren', 3), ('Deric', 3), ('Bobby', 3)},
'movie_3': {('Alec', 2), ('Deric', 5)},
'movie_4': {('Carren', 2), ('Alec', 5)},
}
def new_dict(d):
le_dict = defaultdict(set)
values = [set(), set(), set(), set(), set(), set()]
for key, value in d.items():
for person_score in value:
le_dict[person_score[0]].add(key)
return le_dict
解决方案
我建议直接从您的输入数据中计算最大索引,而不是对其进行硬编码。
from collections import defaultdict
def setlist(size):
def gen():
return [set() for _ in range(size)]
return gen
def get_max_index(d):
return max(score for ranking in d.values() for _, score in ranking)
def rearrange(d, max_index=None):
if max_index is None:
max_index = get_max_index(d)
output = defaultdict(setlist(max_index + 1))
for movie, ranking in d.items():
for person, score in ranking:
output[person][score].add(movie)
return output
这是一个 IDEOne 链接:https ://ideone.com/83v6MN
推荐阅读
- go - 我在哪里将我自己的包的代码放在 Golang 中
- python - 调整单个子图宽度的简单方法?
- javascript - 错误:A
可能只有一个子元素。包含开关,之前使用此代码 - azure - 管道:针对现有构建以临时方式运行自动化测试
- angular - 使用单选按钮选择当前页面上表中的所有行
- .net - 如何在正向前瞻中正确分割整个模式的正则表达式(问号等于)
- flutter - Navigator.push():错误:在此消费者小部件上方找不到正确的提供者
- php - HTML 中的屏幕响应式 PHP 表格
- python - 安装引导式 LDA 包
- oracle - Oracle APEX:每次应用程序启动时重置会话?