困扰两天的关于键值互换的简单问题
本帖最后由 秋灯烬 于 2022-3-23 09:46 编辑actor_of_movies = {"妖猫传": ["黄轩", "染谷将太", "黄轩"], "无问东西": ["章子怡", "王力宏", "祖峰"], "超时空同居": ["雷佳音", "王力宏", "佟丽娅"]}
这是我的一个字典
我要把他转化成
{'黄轩': ['妖猫传'], '染谷将太': ['妖猫传'], '章子怡': ['无问西东'], '王力宏': ['无问西东', '超时空同居'], '祖峰': ['无问西东'], '雷佳音': ['超时空同居'], '佟丽娅': ['超时空同居']}
这样子,也就是演员对应的电影,但是苦于只学了几天Python,写不出来,又被什么哈西值困扰,有没有大佬能帮帮我,我看一下没准就懂了。 from functools import reduce
from operator import or_
actor_of_movies = {"妖猫传": ["黄轩", "染谷将太", "黄轩"], "无问东西": ["章子怡", "王力宏", "祖峰"], "超时空同居": ["雷佳音", "王力宏", "佟丽娅"]}
keys = reduce(or_, + list(map(set, actor_of_movies.values())))
result = {k:[] for k in keys}
for k, v in actor_of_movies.items():
for i in set(v):
result.append(k)
print(result) isdkz 发表于 2022-3-23 10:06
感谢大佬啊,我去研究一下,大佬真是什么都会啊{:9_227:} actor_of_movies = {"妖猫传": ["黄轩", "染谷将太", "黄轩"], "无问东西": [
"章子怡", "王力宏", "祖峰"], "超时空同居": ["雷佳音", "王力宏", "佟丽娅"]}
movie_of_actor = {}
movie_list = []# 存放演员的出演的电影
for movie in actor_of_movies:
# print(movie)
for actor in actor_of_movies:
if actor not in movie_of_actor:# 如果新列表没有这个演员,就先将这个演员和电影写入
movie_list.append(movie)
movie_of_actor = movie_list
movie_list = []
if movie not in movie_of_actor: # 如果新列表没有这个演员,看看是否是新的电影
movie_of_actor.append(movie)
print(movie_of_actor) 秋灯烬 发表于 2022-3-23 10:08
感谢大佬啊,我去研究一下,大佬真是什么都会啊
不客气,{:5_109:},你搞懂那个的话你可以看看这个:
from functools import reduce
from operator import or_
actor_of_movies = {"妖猫传": ["黄轩", "染谷将太", "黄轩"], "无问东西": ["章子怡", "王力宏", "祖峰"], "超时空同居": ["雷佳音", "王力宏", "佟丽娅"]}
keys = reduce(or_, + list(map(set, actor_of_movies.values())))
result = {k: for k in keys}
print(result)
用 for 循环导出演员名也行,不用 reduce 和 or_ 来对集合求交集,这样可以按你的顺序,
用集合的话没法保证顺序:
actor_of_movies = {"妖猫传": ["黄轩", "染谷将太", "黄轩"], "无问东西": ["章子怡", "王力宏", "祖峰"], "超时空同居": ["雷佳音", "王力宏", "佟丽娅"]}
keys = []
for k, v in actor_of_movies.items():
for i in v:
if i not in keys:
keys.append(i)
result = {k: for k in keys}
print(result) isdkz 发表于 2022-3-23 10:06
keys = reduce(or_, )
def or_(a, b):
"Same as a | b."
return a | b
大佬后面是一个列表里面有集合,他们都执行or_,or_我就不理解,后面我也不咋行啊,这是什么意思呢,
感觉有知识鸿沟啊,这个。 本帖最后由 isdkz 于 2022-3-24 12:32 编辑
秋灯烬 发表于 2022-3-24 12:25
keys = reduce(or_,
reduce 其实也可以手动给它传第一个值的,
keys = reduce(or_, ) 可以换成
keys = reduce(or_, [{'染谷将太', '黄轩'}, {'祖峰', '王力宏', '章子怡'}, {'雷佳音', '王力宏', '佟丽娅'}], set())
or_ 就是一个进行或运算的函数,集合的或运算就是求并集,
reduce 的用法你可以看一下这个:
https://python.iswbm.com/c05/c05_04.html 秋灯烬 发表于 2022-3-24 12:25
keys = reduce(or_,
我想知道你那个 or_ 的文档是怎么看的?
我用 help 显示的不是这样子,没有显示出 函数 完整的定义 isdkz 发表于 2022-3-24 12:34
我想知道你那个 or_ 的文档是怎么看的?
我用 help 显示的不是这样子,没有显示出 函数 完整的定义
用的是PyCharm,按了ctrl点一下or_就看到了。
秋灯烬 发表于 2022-3-24 15:50
用的是PyCharm,按了ctrl点一下or_就看到了。
好吧,谢谢{:5_109:} isdkz 发表于 2022-3-24 15:51
好吧,谢谢
哪里哪里,我宇宙级大菜鸡{:9_227:}
页:
[1]