0

您好,我有一个包含如下数据的 counterdict:

{1301: Counter({'total': 18, 
               'inDevelopment': 13, 
                'isDuplicate': 2, 
                'inAnalysis': 2,
                'inQuest': 1}),
 1302: Counter({'total': 15, 
                'inDevelopment': 9, 
                 'inQuest': 1, 
                 'inValidation': 1, 
                  'inAnalysis': 1,
                  'ongoing' : 3})}

如何在不重复的情况下在列表中检索其值。我的意思是我想提取所有现有的值,但不是全部获取,我想让它们重复,所以而不是这个:

 [' inDevelopment','isDuplicate','inAnalysis', 'inQuest','total', 'inDevelopment','inQuest', 'inValidation','inAnalysis', 'ongoing']

输出将是这样的:

['total','inDevelopment','isDuplicate','inAnalysis','inQuest','inValidation','ongoing']

任何帮助将不胜感激,谢谢!

4

2 回答 2

1

您可以使用运算符联合Counter对象|

>>> from collections import Counter
>>> a = Counter('123')
>>> b = Counter('44144')
>>> a
Counter({'2': 1, '3': 1, '1': 1})
>>> b
Counter({'4': 4, '1': 1})
>>> a | b
Counter({'4': 4, '2': 1, '3': 1, '1': 1})
>>> list(a | b)
['2', '3', '1', '4']

在 Python 2.x 中

>>> from collections import Counter
>>> d = {1301: Counter({'total': 18,
    ...
...                   "ongoing" : 3})}
>>> list(reduce(lambda a,b:a|b, d.values()))
['inAnalysis', 'inQuest', 'inDevelopment', ' inDevelopment', 'inValidation', 'ongoing', 'isDuplicate', 'total']

在 Python 3.x 中

>>> from collections import Counter
>>> from functools import reduce
>>> d = ...
>>> list(reduce(lambda a,b:a|b, d.values()))
['inValidation', 'total', ' inDevelopment', 'inDevelopment', 'isDuplicate', 'ongoing', 'inQuest', 'inAnalysis']

更新

您还可以使用set.union

>>> list(set().union(*d.values()))
['inValidation', 'inDevelopment', 'isDuplicate', 'total', 'ongoing', 'inAnalysis', 'inQuest', ' inDevelopment']

这在一个代码中同时适用于 Python 2.x/3.x。

于 2013-09-26T14:45:22.923 回答
0

你可以np.unique使用import numpy as np

>>> d = {1301: Counter({'total': 18,
                'inDevelopment': 13,
                 'isDuplicate': 2,                 'inAnalysis': 2,
                'inQuest': 1}),
  1302: Counter({'total': 15,                 'inDevelopment': 9,
                  'inQuest': 1,
                  'inValidation': 1,
                   'inAnalysis': 1,
                   "ongoing" : 3})}

>>> np.unique(list(d[1301]|d[1302]))

array(['inAnalysis', 'inDevelopment', 'inQuest', 'inValidation',
       'isDuplicate', 'ongoing', 'total'], 
      dtype='|S13')
于 2013-09-26T15:01:02.453 回答