簡體   English   中英

從字典列表中的字典值中查找唯一字符串對的優雅方式

[英]Elegant way of finding unique string pairs from dictionary values in a list of dictionaries

我有一個詞典列表:

    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. 現在,將列表設置為一個集合,我有我唯一的值

我想知道這些使用列表理解是否更優雅。

如果順序無關緊要,那么您可以輕松地將邏輯轉換為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'}
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

這應該工作

另一個格式化選項,運行回2.7

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

仍然是一個“單線”,但有裝飾線斷裂和縮進

內部列表與其他ans相同,在沒有看到第一個的情況下獨立到達

暫無
暫無

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

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