Python 遍历列表的列表

Python Iterating through List of List

这是我的代码

stockList = [
    ['AMD', '57.00', '56.23', '58.40', '56.51'],
    ['AMZN', '3,138.29', '3,111.03', '3242.56689', '3,126.58'],
    ['ATVI', '80.76', '79.16', '81.86', '79.55'],
    ['BA', '178.63', '168.86', '176.96', '169.70'],
    ['BAC', '24.42', '23.43', '23.95', '23.54'],
    ['DAL', '26.43', '25.53', '26.87', '25.66'],
    ['FB', '241.75', '240.00', '248.06', '241.20'],
    ['GE', '7.04', '6.76', '6.95', '6.79'],
    ['GOOGL', '1,555.92', '1,536.36', '1,576.03', '1,544.04'],
    ['GPS', '12.77', '12.04', '12.72', '12.10'],
    ['GRUB', '70.96', '69.71', '70.65', '70.06'],
    ['HD', '262.42', '258.72', '261.81', '260.01'],
    ['LUV', '33.62', '32.45', '33.53', '32.61'],
    ['MSFT', '208.75', '206.72', '213.58', '207.76'],
    ['MU', '51.52', '50.49', '52.31', '50.74'],
    ['NFLX', '490.10', '492.26', '511.52', '494.72', 'SUCCESS'],
    ['PCG', '9.49', '8.96', '9.52', '9.01'],
    ['PFE', '36.69', '35.87', '37.02', '36.05'],
    ['QQQ', '264.00', '263.27', '267.11', '264.58', 'SUCCESS'],
    ['ROKU', '153.36', '148.37', '153.70', '149.11'],
    ['SHOP', '952.83', '976.45', '1,036.25', '981.33', 'SUCCESS'],
    ['SPY', '325.01', '323.64', '325.47', '325.25', 'SUCCESS'],
    ['SQ', '126.99', '125.13', '130.80', '125.76'],
    ['T', '30.25', '29.58', '30.07', '29.73'],
    ['TSLA', '1,568.36', '1,646.56', '1,712.58', '1,654.79', 'SUCCESS'],
    ['TTWO', '153.06', '152.45', '154.47', '153.22', 'SUCCESS'],
    ['TWTR', '37.01', '36.03246', '36.7210083', '36.21'],
    ['WFC', '26.20', '24.45272', '25.0438213', '24.57'],
    ['WMT', '132.33', '130.8515', '132.522049', '131.51']
]

keyword = 'SUCCESS'
secondList = []
for item in stockList:
    if item[4] == keyword:
        secondList.append(stockList[0])
print(secondList)

我的用例是,通过这个列表列表,找到哪个列表包含关键字,从那里发送列表中的第一个项目。我可以用一个列表得到它,但是我不能用一个列表来做。

最重要的是,我将如何浏览包含列表的字典?

{
    'majorDimension': 'ROWS',
    'range': 'Sheet1!A2:F30',
    'values': [
        ['AMD', '57.00', '56.23', '58.40', '56.51'],
        ['AMZN', '3,138.29', '3,111.03', '3242.56689', '3,126.58'],
        ['ATVI', '80.76', '79.16', '81.86', '79.55'],
        ['BA', '178.63', '168.86', '176.96', '169.70'],
        ['BAC', '24.42', '23.43', '23.95', '23.54'],
        ['DAL', '26.43', '25.53', '26.87', '25.66'],
        ['FB', '241.75', '240.00', '248.06', '241.20'],
        ['GE', '7.04', '6.76', '6.95', '6.79'],
        ['GOOGL', '1,555.92', '1,536.36', '1,576.03', '1,544.04'],
        ['GPS', '12.77', '12.04', '12.72', '12.10'],
        ['GRUB', '70.96', '69.71', '70.65', '70.06'],
        ['HD', '262.42', '258.72', '261.81', '260.01'],
        ['LUV', '33.62', '32.45', '33.53', '32.61'],
        ['MSFT', '208.75', '206.72', '213.58', '207.76'],
        ['MU', '51.52', '50.49', '52.31', '50.74'],
        ['NFLX', '490.10', '492.26', '511.52', '494.72', 'SUCCESS'],
        ['PCG', '9.49', '8.96', '9.52', '9.01'],
        ['PFE', '36.69', '35.87', '37.02', '36.05'],
        ['QQQ', '264.00', '263.27', '267.11', '264.58', 'SUCCESS'],
        ['ROKU', '153.36', '148.37', '153.70', '149.11'],
        ['SHOP', '952.83', '976.45', '1,036.25', '981.33', 'SUCCESS'],
        ['SPY', '325.01', '323.64', '325.47', '325.25', 'SUCCESS'],
        ['SQ', '126.99', '125.13', '130.80', '125.76'],
        ['T', '30.25', '29.58', '30.07', '29.73'],
        ['TSLA', '1,568.36', '1,646.56', '1,712.58', '1,654.79', 'SUCCESS'],
        ['TTWO', '153.06', '152.45', '154.47', '153.22', 'SUCCESS'],
        ['TWTR', '37.01', '36.03246', '36.7210083', '36.21'],
        ['WFC', '26.20', '24.45272', '25.0438213', '24.57'],
        ['WMT', '132.33', '130.8515', '132.522049', '131.51'],
    ]
}

这样的事情怎么样?

keywords={"SUCCESS"}
d = # the dictionary
second_list = list()
for nested_lists in d["values"]:
    for stock_info in nested_lists:
        stock_ticker = stock_info[0]
        if stock_ticker in keywords:
            info = set(stock_info[1:])
            if info & keywords:
                second_list.append(stock_ticker)
     

这样更好吗?它应该允许您拥有多个关键字。

列表理解使这变得非常简单。尝试以下操作:

keyword = "SUCCESS"

# PEP8 calls for lower_underscore_case here
second_list = [i[0] for i in stockList if keyword in i]

print(second_list)

对于建议的字典结构,您只需访问包含列表的键,因为并非该字典中的每个值都是列表:

second_list = [i[0] for i in stockList["values"] if keyword in i]

根据您对问题的理解。您的问题分为两部分,分别是:

  1. 如何迭代列表的列表,并从嵌套列表中获取第一项,并将其存储在另一个列表中
  2. 如何遍历字典项,执行相同的操作

如果我的理解是正确的,那么你可能想检查一下。

请注意:我没有使用变量keyword,只是使用了"SUCCESS",只需在代码中将关键字替换为"SUCCESS",就可以了。

1.第一个解决方案

# to get nested list
for item in stockList:
    # this checks whether SUCCESS is present inside a list
    # python way of doing it
    if "SUCCESS" in item: secondList.append(item[0])
    
print(secondList)

# OUTPUT 
# >>> ['NFLX', 'QQQ', 'SHOP', 'SPY', 'TSLA', 'TTWO']

你可以用更pythonic的方式做到这一点,那就是使用List Comprehension

# single line approach, getting the same result
secondList = [item[0] for item in stockList if "SUCCESS" in item]
    
print(secondList)

# OUTPUT
# >>> ['NFLX', 'QQQ', 'SHOP', 'SPY', 'TSLA', 'TTWO']

2。第二个解决方案

为了得到结果,首先你需要将字典分配给你的变量,在我的例子中,我已经分配给一个名为 stockListDictionary

的变量
secondList = []        
# to get a value from key specifically
# likt any dictionary key dictionary["key_name"]
for item in stockListDictionary["values"]:
    if "SUCCESS" in item: secondList.append(item[0])

print(secondList)

# OUTPUT
# >>> ['NFLX', 'QQQ', 'SHOP', 'SPY', 'TSLA', 'TTWO']

使用列表理解

secondList = [item[0] for item in stockListDictionary["values"] if "SUCCESS" in item]

print(secondList)

# OUTPUT
# >>> ['NFLX', 'QQQ', 'SHOP', 'SPY', 'TSLA', 'TTWO']