簡體   English   中英

如何從嵌套在兩個列表中的字典中獲取值?

[英]How to get the values from a dictionary nested within two lists?

我仍然熟悉 python 並使用 API。 我從 API 中提取了以下數據:

    [[{'term': 'Boys', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300247598'},
  {'term': 'Fish', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300266085'},
  {'term': 'Boats', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300178749'}],
 [{'term': 'Bears', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300266516'}],
 None,
  [{'term': 'Interiors',
   'AAT_URL': 'http://vocab.getty.edu/page/aat/300391239'},
  {'term': 'Jewelry', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300209286'},
  {'term': 'Couples', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300379217'},
  {'term': 'Men', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300025928'},
  {'term': 'Women', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300025943'},
  {'term': 'Weights and Measures',
   'AAT_URL': 'http://vocab.getty.edu/page/aat/300386648'}],
...]

我想在這樣的最終列表中提取“術語”鍵中的值(但保留子列表):

[['Boys','Fish','Boats'],['Bears'],['Interiors','Jewlery','Couples','Men','Women','Weights and Measures']...]

每當我嘗試通過這樣的列表進行迭代時:

for x in tags:
    for y in x:
        print (y['term'])

我得到以下結果:

Boys
Fish
Boats
Bears

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-48-f2ff632ad612> in <module>
     11 
     12 for x in tags:
---> 13     for y in x:
     14         print (y['term'])

TypeError: 'NoneType' object is not iterable

我該如何解決? 預先感謝您 c:

在迭代之前檢查xNone

for x in tags:
    if x is not None:
        for y in x:
            print (y['term'])

如果您看到從 API 提取的數據中還有一個元素為 None。 所以你必須檢查你在迭代時沒有遇到這種情況。

for x in tags:
    if(x is not None):
        for y in x:
            print(y['term'])

這將解決問題

要將數據提取到相同結構的列表中,請檢查None並僅在有數據時添加:

data = [[{'term': 'Boys', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300247598'},
         {'term': 'Fish', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300266085'},
         {'term': 'Boats', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300178749'}],
        [{'term': 'Bears', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300266516'}], 
        None,
        [{'term': 'Interiors', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300391239'},
         {'term': 'Jewelry', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300209286'},
         {'term': 'Couples', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300379217'},
         {'term': 'Men', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300025928'},
         {'term': 'Women', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300025943'},
         {'term': 'Weights and Measures', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300386648'}]]

result = []
for inner_list in data:
    if inner_list:  # None and [] are falsy, ignore them

        # got something, add a new empty list to add things into
        result.append([])
        for d in inner_list:
            # add all dicts term to the last item of result
            result[-1].append(d["term"])  

print(result)

將 output:

[['Boys', 'Fish', 'Boats'], ['Bears'], 
 ['Interiors', 'Jewelry', 'Couples', 'Men', 'Women', 'Weights and Measures']]

首先過濾掉 None 然后使用 map function

    data = [
        [
            {"term": "Boys", "AAT_URL": "http://vocab.getty.edu/page/aat/300247598"},
            {"term": "Fish", "AAT_URL": "http://vocab.getty.edu/page/aat/300266085"},
            {"term": "Boats", "AAT_URL": "http://vocab.getty.edu/page/aat/300178749"},
        ],
        [{"term": "Bears", "AAT_URL": "http://vocab.getty.edu/page/aat/300266516"}],
        None,
        [
            {"term": "Interiors", "AAT_URL": "http://vocab.getty.edu/page/aat/300391239"},
            {"term": "Jewelry", "AAT_URL": "http://vocab.getty.edu/page/aat/300209286"},
            {"term": "Couples", "AAT_URL": "http://vocab.getty.edu/page/aat/300379217"},
            {"term": "Men", "AAT_URL": "http://vocab.getty.edu/page/aat/300025928"},
            {"term": "Women", "AAT_URL": "http://vocab.getty.edu/page/aat/300025943"},
            {"term": "Weights and Measures", "AAT_URL": "http://vocab.getty.edu/page/aat/300386648"},
        ],
    ]


    result = map(lambda x: list(map(lambda i: i["term"], x)), filter(lambda x: x is not None, data))
    print(list(result))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM