遍历嵌套列表中的每个列表
Going through each list in nested list
我希望我的代码遍历列表中的每个子列表。但到目前为止它只是 returns 第一个子列表。
在创建这个问题之前,我研究了之前关于嵌套列表的问题的多个答案。但据我所知,none 对我来说确实有意义。我实施它们并尽我所能尝试它们。
l = [['Empire:FourKingdoms:', ' US FR DE GB', ' 208 96 42 149'], ['BigFarmMobileHarvest:', ' US FR DE GB', ' 211 101 64 261'], ['AgeofLords:', 'US JP FR DE GB', '00 00 00 00 00'], ['BattlePiratesHQ:', 'US JP FR DE GB', '00 00 00 00 00'], ['CallofWar:', 'US JP FR DE GB', '00 00 00 00 00'], ['Empire:AgeofKnights:', 'US JP FR DE GB', '00 00 00 00 00'], ['Empire:MillenniumWars:', 'US JP FR DE GB', '00 00 00 00 00'], ['eRepublik:', 'US JP FR DE GB', '00 00 00 00 00'], ['GameofEmperors:', 'US JP FR DE GB', '00 00 00 00 00'], ['GameofTrenches:', 'US JP FR DE GB', '00 00 00 00 00'], ['ImperiaOnline:', 'US JP FR DE GB', '00 00 00 00 00'], ['ImperialHero:', 'US JP FR DE GB', '00 00 00 00 00'], ['MarsTomorrow:', 'US JP FR DE GB', '00 00 00 00 00'], ['OneEpicKnight:', 'US JP FR DE GB', '00 00 00 00 00'], ['SeasonsofWar:', 'US JP FR DE GB', '00 00 00 00 00'], ['SIEGE:TITANWARS:', 'US JP FR DE GB', '00 00 00 00 00'], ['SIEGE:WorldWarII:', 'US JP FR DE GB', '00 00 00 00 00'], ['Skytopia-CityTycoon:', 'US JP FR DE GB', '00 00 00 00 00'], ['Supremacy1914:', 'US JP FR DE GB', '00 00 00 00 00'], ['TacticalHeroes2:Platoons:', 'US JP FR DE GB', '00 00 00 00 00'], ['TwinShooter-Invaders:', 'US JP FR DE GB', '00 00 00 00 00'], ['VEGAConflict:', 'US JP FR DE GB', '00 00 00 00 00'], ['WarandPeace:', ' US DE', ' 358 571'], ['WarCommander:RogueAssault:', ' US FR DE GB', ' 373 579 297 407'], ['WorldatWar:WW2StrategyMMO:', 'US JP FR DE GB', '00 00 00 00 00']]
new_l = []
def name(x):
for items in x:
#print(items)
for value in items:
#print(value)
s = " ".join(str(i) for i in items) # splits from list to sublists
#cleans the whitespace, quation marks etc.
no_list = re.sub("\[",'',s)
no_list = re.sub("\]s",'',no_list)
no_list = re.sub("\'" , '',no_list)
no_list = re.sub("\'", '',no_list)
#splits the string
s1 = no_list.split(' ')
#cleans up again
a = list(filter(None, s1))
# make items in list to dict
pairs = len(a) // 2
res = {a[0]: dict(zip(a[1:1+pairs], a[1+pairs:]))}
new_l.append(res)
return res
print(name(l))
(不需要的)结果:
{'Empire:FourKingdoms:': {'US': '208', 'FR': '96', 'DE': '42', 'GB': '149'}}
有趣的是,如果我不说 "return res" 而说 "print(res)" 我得到了我想要的,但是所有的东西都被复制了三次。
{'Empire:FourKingdoms:': {'US': '208', 'FR': '96', 'DE': '42', 'GB': '149'}}
{'Empire:FourKingdoms:': {'US': '208', 'FR': '96', 'DE': '42', 'GB': '149'}}
{'Empire:FourKingdoms:': {'US': '208', 'FR': '96', 'DE': '42', 'GB': '149'}}
{'BigFarmMobileHarvest:': {'US': '211', 'FR': '101', 'DE': '64', 'GB': '261'}}
{'BigFarmMobileHarvest:': {'US': '211', 'FR': '101', 'DE': '64', 'GB': '261'}}
{'BigFarmMobileHarvest:': {'US': '211', 'FR': '101', 'DE': '64', 'GB': '261'}}
...
如此接近,但仍然如此。
我不确定为什么我的代码喜欢和我一起玩。
(代码也可能看起来很丑陋,但我仍在学习并打算在完成后清理它)
return 语句的位置仅导致算法的一部分执行,提前停止函数以达到您的预期输出。
此外,如果您不希望嵌套列表增加三倍,则不需要嵌套列表。只用一层for循环。
无需过多更改代码本身:
import re
new_l = []
def name(x):
for items in x:
s = " ".join(str(i) for i in items) # splits from list to sublists
#cleans the whitespace, quation marks etc.
no_list = re.sub("\[",'',s)
no_list = re.sub("\]s",'',no_list)
no_list = re.sub("\'" , '',no_list)
no_list = re.sub("\'", '',no_list)
#splits the string
s1 = no_list.split(' ')
#cleans up again
a = list(filter(None, s1))
# make items in list to dict
pairs = len(a) // 2
res = {a[0]: dict(zip(a[1:1+pairs], a[1+pairs:]))}
new_l.append(res)
return new_l
print(name(l))
我希望我的代码遍历列表中的每个子列表。但到目前为止它只是 returns 第一个子列表。
在创建这个问题之前,我研究了之前关于嵌套列表的问题的多个答案。但据我所知,none 对我来说确实有意义。我实施它们并尽我所能尝试它们。
l = [['Empire:FourKingdoms:', ' US FR DE GB', ' 208 96 42 149'], ['BigFarmMobileHarvest:', ' US FR DE GB', ' 211 101 64 261'], ['AgeofLords:', 'US JP FR DE GB', '00 00 00 00 00'], ['BattlePiratesHQ:', 'US JP FR DE GB', '00 00 00 00 00'], ['CallofWar:', 'US JP FR DE GB', '00 00 00 00 00'], ['Empire:AgeofKnights:', 'US JP FR DE GB', '00 00 00 00 00'], ['Empire:MillenniumWars:', 'US JP FR DE GB', '00 00 00 00 00'], ['eRepublik:', 'US JP FR DE GB', '00 00 00 00 00'], ['GameofEmperors:', 'US JP FR DE GB', '00 00 00 00 00'], ['GameofTrenches:', 'US JP FR DE GB', '00 00 00 00 00'], ['ImperiaOnline:', 'US JP FR DE GB', '00 00 00 00 00'], ['ImperialHero:', 'US JP FR DE GB', '00 00 00 00 00'], ['MarsTomorrow:', 'US JP FR DE GB', '00 00 00 00 00'], ['OneEpicKnight:', 'US JP FR DE GB', '00 00 00 00 00'], ['SeasonsofWar:', 'US JP FR DE GB', '00 00 00 00 00'], ['SIEGE:TITANWARS:', 'US JP FR DE GB', '00 00 00 00 00'], ['SIEGE:WorldWarII:', 'US JP FR DE GB', '00 00 00 00 00'], ['Skytopia-CityTycoon:', 'US JP FR DE GB', '00 00 00 00 00'], ['Supremacy1914:', 'US JP FR DE GB', '00 00 00 00 00'], ['TacticalHeroes2:Platoons:', 'US JP FR DE GB', '00 00 00 00 00'], ['TwinShooter-Invaders:', 'US JP FR DE GB', '00 00 00 00 00'], ['VEGAConflict:', 'US JP FR DE GB', '00 00 00 00 00'], ['WarandPeace:', ' US DE', ' 358 571'], ['WarCommander:RogueAssault:', ' US FR DE GB', ' 373 579 297 407'], ['WorldatWar:WW2StrategyMMO:', 'US JP FR DE GB', '00 00 00 00 00']]
new_l = []
def name(x):
for items in x:
#print(items)
for value in items:
#print(value)
s = " ".join(str(i) for i in items) # splits from list to sublists
#cleans the whitespace, quation marks etc.
no_list = re.sub("\[",'',s)
no_list = re.sub("\]s",'',no_list)
no_list = re.sub("\'" , '',no_list)
no_list = re.sub("\'", '',no_list)
#splits the string
s1 = no_list.split(' ')
#cleans up again
a = list(filter(None, s1))
# make items in list to dict
pairs = len(a) // 2
res = {a[0]: dict(zip(a[1:1+pairs], a[1+pairs:]))}
new_l.append(res)
return res
print(name(l))
(不需要的)结果:
{'Empire:FourKingdoms:': {'US': '208', 'FR': '96', 'DE': '42', 'GB': '149'}}
有趣的是,如果我不说 "return res" 而说 "print(res)" 我得到了我想要的,但是所有的东西都被复制了三次。
{'Empire:FourKingdoms:': {'US': '208', 'FR': '96', 'DE': '42', 'GB': '149'}}
{'Empire:FourKingdoms:': {'US': '208', 'FR': '96', 'DE': '42', 'GB': '149'}}
{'Empire:FourKingdoms:': {'US': '208', 'FR': '96', 'DE': '42', 'GB': '149'}}
{'BigFarmMobileHarvest:': {'US': '211', 'FR': '101', 'DE': '64', 'GB': '261'}}
{'BigFarmMobileHarvest:': {'US': '211', 'FR': '101', 'DE': '64', 'GB': '261'}}
{'BigFarmMobileHarvest:': {'US': '211', 'FR': '101', 'DE': '64', 'GB': '261'}}
...
如此接近,但仍然如此。
我不确定为什么我的代码喜欢和我一起玩。
(代码也可能看起来很丑陋,但我仍在学习并打算在完成后清理它)
return 语句的位置仅导致算法的一部分执行,提前停止函数以达到您的预期输出。
此外,如果您不希望嵌套列表增加三倍,则不需要嵌套列表。只用一层for循环。
无需过多更改代码本身:
import re
new_l = []
def name(x):
for items in x:
s = " ".join(str(i) for i in items) # splits from list to sublists
#cleans the whitespace, quation marks etc.
no_list = re.sub("\[",'',s)
no_list = re.sub("\]s",'',no_list)
no_list = re.sub("\'" , '',no_list)
no_list = re.sub("\'", '',no_list)
#splits the string
s1 = no_list.split(' ')
#cleans up again
a = list(filter(None, s1))
# make items in list to dict
pairs = len(a) // 2
res = {a[0]: dict(zip(a[1:1+pairs], a[1+pairs:]))}
new_l.append(res)
return new_l
print(name(l))