Python字典输出与预期不符,添加字符串元素失效怎么解决?
问题原因
你代码里的核心问题出在list.index()方法的特性:该方法只会返回指定元素在列表中第一次出现的索引。
比如你遍历到列表里第2个值为1的元素时,adatok.index(1)返回的还是第一个1的位置索引1,所以每次取到的前一个元素都是adatok[0]即marha,往set里添加重复元素不会产生任何变化,最终1对应的set里就只有1个值;同理数字2的匹配也只会拿到第一次出现时对应的前一个元素kacsa,就会出现和预期不一致的输出。
修复方案
不要用index()方法动态查找位置,直接遍历列表的索引+元素对即可,修改后的代码如下:
adatok = ["marha", 1, "kacsa", 2, "kacsa", 1, "birka", 3, "marha", 4, "marha", 2] sorszámok = list(set([x for x in adatok if type(x) == int])) szótár = {} for i in sorszámok: szótár.update({i:set()}) # 改用enumerate同时获取索引和元素 for idx, j in enumerate(adatok): if type(j) == int: # 直接用当前索引取前一位元素,避免index()的重复查找问题 szótár[j].add(adatok[idx-1]) print(szótár) # 输出符合预期:{1: {'marha', 'kacsa'}, 2: {'kacsa', 'marha'}, 3: {'birka'}, 4: {'marha'}}
内容的提问来源于stack exchange,提问作者pythonrecruit08
相关产品推荐
相关产品推荐

