Python 在至少两个dict中查找公用键
我想获得以下形式的口述(不严格): 当我有一个输入,这是一个目录列表。它们的关键点可能是相交的,而值-不是。例如,在我们的例子中,我们在两个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
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)