【问题标题】:For each value in list of dictionaries print corresponding value in python对于字典列表中的每个值,在 python 中打印相应的值
【发布时间】:2020-05-03 11:01:13
【问题描述】:

我有一个字典列表,我想为每个字典做一个以找到相应的值。

我的清单:

my_list = [{'genre':'Dystopia', 'book':'Hunger Games'},
           {'genre':'Fanstasy', 'book':'Harry Potter'},
           {'genre':'Dystopia', 'book':'Divergent'}]

我想获得与该类型相对应的书籍。

预期结果:

for 'Dystopia' get 'Hunger Games', 'Divergent'
for 'Fantasy' get 'Harry Potter'

我不知道该怎么做。我知道我需要一个 for 循环,但不知道除此之外还能做什么。

for x in my_list:
   x['url']

不确定接下来要添加什么。

【问题讨论】:

  • 到底是什么问题?那个 for 循环对我来说看起来不错。你为什么要为此使用字典列表?

标签: python python-3.x dictionary for-loop arraylist


【解决方案1】:

对于更实用的方法,这会返回正确书籍的地图:

list(map(lambda x: x["book"], filter(lambda x: x["genre"] == "Dystopia", my_list)))
>>> ['Hunger Games', 'Divergent']

【讨论】:

    【解决方案2】:

    this answer,您可以尝试从内置的dict 创建一个新类:

    class Dictlist(dict):
        def __setitem__(self, key, value):
            try:
                self[key]
            except KeyError:
                super(Dictlist, self).__setitem__(key, [])
            self[key].append(value)
    

    所以...

    d = Dictlist()
    for element in my_list:
        d[element['genre']] = d['book']
    

    输出:

    {'Dystopia': ['Hunger Games', 'Divergent'], 'Fanstasy': ['Harry Potter']}
    

    【讨论】:

      【解决方案3】:

      你可以这样做:

      books={}
      for i in my_list:
          genre=i["genre"]
          book=i["book"]
          if genre in books:
              if book in books[genre]:
                  continue
          else:
              books[genre]=[]
          books[genre].append(book)
      
      print(books)
      

      输出

      {'Dystopia': ['Hunger Games', 'Divergent'], 'Fanstasy': ['Harry Potter']}
      

      【讨论】:

        【解决方案4】:

        你想得到一本体裁词典 -> 书籍列表,

        所以你需要迭代my_list,获取流派(作为键)和书籍(作为值)并将其附加到该流派的书籍列表中

        使用defaultdict 可以轻松消除第一本书的边角。

        from collections import defaultdict
        
        result = defaultdict(list)
        for d in my_list:
          result[d['genre']].append(d['book'])
        

        【讨论】:

          【解决方案5】:

          您好,请在下面找到解决方案。

          my_list = [
          {'genre':'Dystopia', 'book':'Hunger Games'},
                     {'genre':'Fanstasy', 'book':'Harry Potter'},
                     {'genre':'Dystopia', 'book':'Divergent'}
                     ]
          genre_holder = dict()
          for item in my_list:
              if genre_holder.get(item['genre'],"empty") == "empty":
                   genre_holder[item['genre']] = list()
              genre_holder[item['genre']].append(item['book'])
          print(genre_holder)
          
          for genre in genre_holder:
              print("for ",genre," get ", ",".join(genre_holder[genre]))
          

          【讨论】:

            【解决方案6】:

            试试这个。

            [dictionary['book'] for dictionary in my_list if dictionary['genre'] == 'Dystopia']
            

            这会遍历my_list 中的所有字典,如果genreDystopia,它会记录book

            下面显示了如何获取包含每种类型的所有书籍的字典。

            genres = set([dictionary['genre'] for dictionary in my_list])
            result = {genre:[dictionary['book'] for dictionary in my_list if dictionary['genre'] == genre] for genre in genres}
            

            【讨论】:

            • 我有多种类型,想避免像反乌托邦这样的硬编码值。我只是希望它返回每种类型的值
            猜你喜欢
            • 2013-02-16
            • 1970-01-01
            • 2022-08-19
            • 1970-01-01
            • 2015-10-03
            • 2023-01-03
            • 1970-01-01
            • 2014-12-26
            • 1970-01-01
            相关资源
            最近更新 更多