Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在至少两个dict中查找公用键_Python - Fatal编程技术网

Python 在至少两个dict中查找公用键

Python 在至少两个dict中查找公用键,python,Python,我想获得以下形式的口述(不严格): 当我有一个输入,这是一个目录列表。它们的关键点可能是相交的,而值-不是。例如,在我们的例子中,我们在两个dict中有相同的键65,其值分别为Fresh和freezed 这是我的解决方案,我想改进它: outliers = [ {65: 'Fresh', 66: 'Fresh', 81: 'Fresh', 95: 'Fresh', 96: 'Fresh', 128: 'Fresh', 171: 'Fresh', 193: 'Fresh', 21

我想获得以下形式的口述(不严格):

当我有一个输入,这是一个目录列表。它们的关键点可能是相交的,而值-不是。例如,在我们的例子中,我们在两个dict中有相同的键
65
,其值分别为
Fresh
freezed

这是我的解决方案,我想改进它:

outliers = [
    {65: 'Fresh', 66: 'Fresh', 81: 'Fresh', 95: 'Fresh', 96: 'Fresh',
     128: 'Fresh', 171: 'Fresh', 193: 'Fresh', 218: 'Fresh', 304: 'Fresh',
     305: 'Fresh', 338: 'Fresh', 353: 'Fresh', 355: 'Fresh', 357: 'Fresh',
     412: 'Fresh'},

    {86: 'Milk', 98: 'Milk', 154: 'Milk', 356: 'Milk'},

    {75: 'Grocery', 154: 'Grocery'},

    {38: 'Frozen', 57: 'Frozen', 65: 'Frozen', 145: 'Frozen', 175: 'Frozen',

     264: 'Frozen', 325: 'Frozen', 420: 'Frozen', 429: 'Frozen', 439: 'Frozen'},

    {75: 'Detergents_Paper', 161: 'Detergents_Paper'},

    {66: 'Delicatessen', 109: 'Delicatessen', 128: 'Delicatessen',
     137: 'Delicatessen', 142: 'Delicatessen', 154: 'Delicatessen',
     183: 'Delicatessen', 184: 'Delicatessen', 187: 'Delicatessen',
     203: 'Delicatessen', 233: 'Delicatessen', 285: 'Delicatessen',
     289: 'Delicatessen', 343: 'Delicatessen'}
]

common_outliers = {}
for outlier in outliers:
    for idx, feature in outlier.items():
        if idx not in common_outliers:
            common_outliers[idx] = [feature]
        else:
            common_outliers[idx].append(feature)
common_outliers = {idx: features for idx, features in common_outliers.items()
                   if len(features) > 1}
print(common_outliers)
您还可以使用使其更简单,它允许取消密钥检查步骤:

from collections import defaultdict

common_outliers = defaultdict(list)
for outlier in outliers:
    for idx, feature in outlier.items():
        common_outliers[idx].append(feature)

common_outliers = {idx: features for idx, features in common_outliers.items()
                    if len(features) > 1}
您还可以使用使其更简单,它允许取消密钥检查步骤:

from collections import defaultdict

common_outliers = defaultdict(list)
for outlier in outliers:
    for idx, feature in outlier.items():
        common_outliers[idx].append(feature)

common_outliers = {idx: features for idx, features in common_outliers.items()
                    if len(features) > 1}
输出:

{65: ['Fresh', 'Frozen'],
 66: ['Fresh', 'Delicatessen'],
 75: ['Grocery', 'Detergents_Paper'],
 128: ['Fresh', 'Delicatessen'],
 154: ['Milk', 'Grocery', 'Delicatessen']}
输出:

{65: ['Fresh', 'Frozen'],
 66: ['Fresh', 'Delicatessen'],
 75: ['Grocery', 'Detergents_Paper'],
 128: ['Fresh', 'Delicatessen'],
 154: ['Milk', 'Grocery', 'Delicatessen']}

我想我以前读错了,你想过滤掉列表中只有一个功能的所有条目吗?@TomKarzes我想只显示那些出现了一次以上的条目。使用
defaultdict
或普通
dict
.setdefault
方法,这类问题似乎更适合你做
d.setdefault(k,[])。append(v)
我想我以前读错了,你想过滤掉列表中只有一个功能的所有条目吗?@TomKarzes我想只显示那些出现了一次以上的条目。使用
defaultdict
或普通
dict
.setdefault
方法,这类问题似乎更适合你做
d.setdefault(k,[])。append(v)