【问题标题】:Reaching an element type list in the dictionary and operations with it [duplicate]到达字典中的元素类型列表并对其进行操作[重复]
【发布时间】:2020-07-10 13:31:40
【问题描述】:

我遇到了一个关于从由列表组成的字典中获取元素的问题。这里的任务是从 ids 列表中获取唯一值,答案应该是:[213, 15, 54, 119, 98, 35]。我知道我应该使用.intersection(set),但是,我花了很多时间试图从这本字典中删除数据以使它们看起来像集合。

ids = {'user1': [213, 213, 213, 15, 213], 
       'user2': [54, 54, 119, 119, 119], 
       'user3': [213, 98, 98, 35]}

我只有这个,但我太紧张了,我看不到任何解决方案,这就是为什么我请求帮助

for items in ids.items():
  sets=set(items[1])
print(sets)

【问题讨论】:

    标签: python python-3.x list dictionary duplicates


    【解决方案1】:

    获取字典值,使用itertools.chain 展平生成的嵌套列表并构建set

    from itertools import chain
    
    set(chain.from_iterable(ids.values()))
    #{15, 35, 54, 98, 119, 213}
    

    【讨论】:

      【解决方案2】:

      您可以使用|联合运算符。

      out=set()
      for val in ids.values():
          out=out|set(val)
      
      list(out)
      # [15, 35, 54, 98, 119, 213]
      

      或者你可以使用union方法。

      out=set() #Suggested by @schwobaseggl 
      for val in ids.values():
          out=out.union(val)
      

      集合理解

      {i for val in ids.values() for i in val}
      

      【讨论】:

      • 如果使用union方法,则不需要将val转换为集合
      • 哦,我推荐了相同的理解答案。没看到你也这样做。我会删除我的答案。
      • @RoadRunner 实际上我们都同时发布了它。 ;)
      • @Ch3steR 不要使用sum 连接列表。它具有二次复杂度。
      • @RoadRunner 我也投票决定关闭它,因为它与您的建议重复。
      猜你喜欢
      • 2019-04-01
      • 2020-01-05
      • 1970-01-01
      • 2021-04-03
      • 2014-01-24
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      相关资源
      最近更新 更多