遍历嵌套列表中的每个列表

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))