从字典列表中的字典值中查找唯一字符串对的优雅方式

时间:2018-01-23 18:45:29

标签: python string list dictionary

我有一个词典列表:

    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. 对于每个字典,获取每个['item_1']和每个['item_2']
  3. 为每个['item_2']的成员执行每个['item_1'] +''+成员
  4. 现在,将列表设为一个集合,我有我独特的值
  5. 我想知道这些使用列表理解是否更优雅。

3 个答案:

答案 0 :(得分:4)

如果顺序无关紧要,那么您可以轻松地将您的逻辑转换为set-comprehnsion(如果您愿意,可以转换为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'}

答案 1 :(得分:1)

FUNCTION IsDate( p_str IN VARCHAR2, p_format IN VARCHAR2 ) RETURN NUMBER AS
V_date DATE;
BEGIN
    V_Date := TO_DATE( p_str, p_format );
    RETURN 1;
EXCEPTION
   WHEN OTHERS THEN
      RETURN 0;
END;

这应该有效

答案 2 :(得分:1)

another formatting option, runs back to 2.7

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

still a 'one-liner' but with decorative line breaks and indentation

inner list comp same as other ans, arrived at independently without seeing it 1st