【问题标题】:Elegant way of finding unique string pairs from dictionary values in a list of dictionaries从字典列表中的字典值中查找唯一字符串对的优雅方法
【发布时间】:2018-07-02 16:30:38
【问题描述】:

我有一个字典列表:

    some_list = [
                  {
                     item1:'a', 
                     item2:['1', '2']
                  }, 
                  {
                     item1:'b', 
                     item2:['1', '2']
                  }, 
                  {
                     item1:'a', 
                     item2:['1']
                  }
                ]

我想得到:

['a 1', 'a 2', 'b 1', 'b 2'] 其中项 1 中的每个值都与每个字典的项 2 中的值配对,然后只剩下唯一的字符串。

我可以想到一个明显的方法,即:

  1. 遍历 some_list;
  2. 对于每个字典,获取 each['item_1'] 和 each['item_2']
  3. 对于 each['item_2'] 的成员,执行 each['item_1'] + ' ' + member
  4. 现在,将列表组合成一个集合,我就有了自己的独特价值

我想知道这些是否是使用列表理解的更优雅的方式。

【问题讨论】:

  • 顺序重要吗?
  • 顺序无所谓!

标签: python string list dictionary


【解决方案1】:

如果顺序无关紧要,那么您可以轻松地将您的逻辑转换为集合理解(如果您愿意,还可以转换为 list):

In [1]: some_list = [
   ...:                   {
   ...:                      'item1':'a',
   ...:                      'item2':['1', '2']
   ...:                   },
   ...:                   {
   ...:                      'item1':'b',
   ...:                      'item2':['1', '2']
   ...:                   },
   ...:                   {
   ...:                      'item1':'a',
   ...:                      'item2':['1']
   ...:                   }
   ...:                 ]

In [2]: {f"{d['item1']} {v}" for d in some_list for v in d['item2']}
Out[2]: {'a 1', 'a 2', 'b 1', 'b 2'}

【讨论】:

  • Python 3. 6 + 是必需的。
  • @CristiFati 是的,当然,您可以替换任何您想要(或必须满足)的字符串格式。
  • 如果顺序很重要,您可以将整个内容附在sorted()
【解决方案2】:
def fun(item):
     return [item[item1]+' '+k for k in item[item2]]
res = []
[res.append(fun(i)) for i in some_list if(fun(i)) not in res]
print res

这应该可以工作

【讨论】:

  • 好答案。但条件是获得唯一值。
  • 您不应将列表理解用于副作用。这违背了他们的全部目的。
【解决方案3】:

另一个格式化选项,运行回 2.7

sorted(map(' '.join,
           {(d['item1'], v)
            for d in some_list
                for v in d['item2']}))

仍然是“单线”,但带有装饰性换行符和缩进

inner list comp与其他ans相同,独立到达,没有看到它1st

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 2018-05-29
    相关资源
    最近更新 更多