这是我的第一篇堆栈溢出帖子。如果有任何反馈,我将不胜感激。我正在尝试用champion_name_id中的值填充列表champion_frequency_list。我的嵌套循环似乎返回了一个空列表。有人能帮我理解这个问题吗?
champion_frequency = {235: 19, 202: 26, 145: 3, 523: 5, 360: 3, 67: 1, 236: 5, 498: 1, 21: 2, 96: 3, 22: 18, 110: 1, 51: 3, 429: 1, 81: 2, 104: 1, 2: 1, 115: 1, 14: 1, 61: 1, 875: 1, 31: 1}
champion_name_id = {'1': 'Annie',
'10': 'Kayle',
'101': 'Xerath',
'102': 'Shyvana',
'103': 'Ahri',
'104': 'Graves',
'105': 'Fizz',
'106': 'Volibear',
'107': 'Rengar',
'11': 'MasterYi',
'110': 'Varus',
'111': 'Nautilus',
'112': 'Viktor',
'113': 'Sejuani',
'114': 'Fiora',
'115': 'Ziggs',
'117': 'Lulu',
'119': 'Draven',
'12': 'Alistar',
'120': 'Hecarim',
'121': 'Khazix',
'122': 'Darius',
'126': 'Jayce',
'127': 'Lissandra',
'13': 'Ryze',
'131': 'Diana',
'133': 'Quinn',
'134': 'Syndra',
'136': 'AurelionSol',
'14': 'Sion',
'141': 'Kayn',
'142': 'Zoe',
'143': 'Zyra',
'145': 'Kaisa',
'147': 'Seraphine',
'15': 'Sivir',
'150': 'Gnar',
'154': 'Zac',
'157': 'Yasuo',
'16': 'Soraka',
'161': 'Velkoz',
'163': 'Taliyah',
'164': 'Camille',
'17': 'Teemo',
'18': 'Tristana',
'19': 'Warwick',
'2': 'Olaf',
'20': 'Nunu',
'201': 'Braum',
'202': 'Jhin',
'203': 'Kindred',
'21': 'MissFortune',
'22': 'Ashe',
'222': 'Jinx',
'223': 'TahmKench',
'23': 'Tryndamere',
'235': 'Senna',
'236': 'Lucian',
'238': 'Zed',
'24': 'Jax',
'240': 'Kled',
'245': 'Ekko',
'246': 'Qiyana',
'25': 'Morgana',
'254': 'Vi',
'26': 'Zilean',
'266': 'Aatrox',
'267': 'Nami',
'268': 'Azir',
'27': 'Singed',
'28': 'Evelynn',
'29': 'Twitch',
'3': 'Galio',
'30': 'Karthus',
'31': 'Chogath',
'32': 'Amumu',
'33': 'Rammus',
'34': 'Anivia',
'35': 'Shaco',
'350': 'Yuumi',
'36': 'DrMundo',
'360': 'Samira',
'37': 'Sona',
'38': 'Kassadin',
'39': 'Irelia',
'4': 'TwistedFate',
'40': 'Janna',
'41': 'Gangplank',
'412': 'Thresh',
'42': 'Corki',
'420': 'Illaoi',
'421': 'RekSai',
'427': 'Ivern',
'429': 'Kalista',
'43': 'Karma',
'432': 'Bard',
'44': 'Taric',
'45': 'Veigar',
'48': 'Trundle',
'497': 'Rakan',
'498': 'Xayah',
'5': 'XinZhao',
'50': 'Swain',
'51': 'Caitlyn',
'516': 'Ornn',
'517': 'Sylas',
'518': 'Neeko',
'523': 'Aphelios',
'53': 'Blitzcrank',
'54': 'Malphite',
'55': 'Katarina',
'555': 'Pyke',
'56': 'Nocturne',
'57': 'Maokai',
'58': 'Renekton',
'59': 'JarvanIV',
'6': 'Urgot',
'60': 'Elise',
'61': 'Orianna',
'62': 'MonkeyKing',
'63': 'Brand',
'64': 'LeeSin',
'67': 'Vayne',
'68': 'Rumble',
'69': 'Cassiopeia',
'7': 'Leblanc',
'72': 'Skarner',
'74': 'Heimerdinger',
'75': 'Nasus',
'76': 'Nidalee',
'77': 'Udyr',
'777': 'Yone',
'78': 'Poppy',
'79': 'Gragas',
'8': 'Vladimir',
'80': 'Pantheon',
'81': 'Ezreal',
'82': 'Mordekaiser',
'83': 'Yorick',
'84': 'Akali',
'85': 'Kennen',
'86': 'Garen',
'875': 'Sett',
'876': 'Lillia',
'89': 'Leona',
'9': 'Fiddlesticks',
'90': 'Malzahar',
'91': 'Talon',
'92': 'Riven',
'96': 'KogMaw',
'98': 'Shen',
'99': 'Lux'}
champion_frequency_list = []
for key in champion_name_id:
#print('key', key, 'key-type', type(key))
for index in range(len(list(champion_frequency.keys()))):
#print('index',index)
#print('current champion frequency index', str(list(champion_frequency.keys())[index]), 'type', type(str(list(champion_frequency.keys())[index])))
#print('is this iteration true?: ', key == str(list(champion_frequency.keys())[index]))
#print('if true, append to list', champion_name_id[str(key)], 'type', type(champion_name_id[str(key)]))
champion_name = champion_name_id[str(key)]
if key == list(champion_frequency.keys())[index]:
champion_frequency_list.append(champion_name)
print('champion frequency list length', len(champion_frequency_list))
print('champion frequency list', champion_frequency_list)发布于 2020-11-18 02:19:57
我不确定这是否是你要找的,但我认为你需要更换
if key == list(champion_frequency.keys())[index]:
champion_frequency_list.append(champion_name)使用
if int(key) == list(champion_frequency.keys())[index]:
champion_frequency_list.append(champion_name)发布于 2020-11-18 02:37:04
简而言之,您的键的类型不匹配,因此作为user14654909 notes,您需要将key转换为int,以匹配您从champion_frequency获得的键的类型,从而进行测试:
if int(key) == list(champion_frequency.keys())[index]:而不是:
if key == list(champion_frequency.keys())[index]:长长的答案是:这段代码极其复杂和低效;它根本不能从您使用dict中获益。多亏了一个双重嵌套的循环和champion_frequency.keys()的内部重复列表,您正在为一些应该只需要工作的东西做O(n × m²)工作(n是champion_name_id的长度,m是champion_frequency的长度)。除了print之外,整个嵌套循环可以简化为:
champion_frequency_list = [name for champion_id_str, name in champion_name_id.items()
if int(champion_id_str) in champion_frequency]它将为您节省数百个临时list,并从根本上消除与champion_frequency大小相关的所有复杂性(因为简单的成员资格测试在dict中大约是O(1) )。一个简单的例子:
champion_frequency = {... definition omitted for brevity ...}
champion_name_id = {... definition omitted for brevity ...}
champion_frequency_list = []
for key in champion_name_id:
for index in range(len(list(champion_frequency.keys()))):
champion_name = champion_name_id[str(key)]
if int(key) == list(champion_frequency.keys())[index]:
champion_frequency_list.append(champion_name)
print('champion frequency list length', len(champion_frequency_list))
print('champion frequency list', champion_frequency_list)
champion_frequency_list_simple = [name for champion_id_str, name in champion_name_id.items()
if int(champion_id_str) in champion_frequency]
print('Simple champion frequency list', champion_frequency_list_simple)
print('Is simple solution result identical?', champion_frequency_list == champion_frequency_list_simple)https://stackoverflow.com/questions/64880898
复制相似问题