python中的匹配值

2024-09-28 03:17:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个场景,试图匹配json数据中的以下元素

a={'n_name': 'APP-Ptyh ', 'n_name': 'Com Don Ctes - Aty ', 'n_name': 'Sce Fbh - Dor Node', 'n_name': 'kke gg - Dor Node'}
b={'n_name': 'APP-Ptyh', 'n_name': 'Com Don Ctes - Aty', 'n_name': 'Sce Fbh - Dor Nomk ', 'n_name': 'kke gg - Dor Node'}
c=[]

我为匹配所做的工作:

if a["n_name"] == b["n_name"]:
   c.append(b["n_name"])

这并没有正确匹配元素,因为在a数据源中,元素APP-Ptyh在这两个数据源中是相同的,但后面有一个空格。 预期的输出是它应该匹配,而不考虑尾随空格。 关于如何实现这一目标的任何帮助。 这是要存储在列表c中的匹配元素的期望输出:

c= ['APP-Ptyh', 'Com Don Ctes - Aty', 'kke gg - Dor Node']

Tags: namecomnodeapp元素数据源dongg
3条回答

你不能有带重复钥匙的听写器。相反,您可以使用单个键,并将具有该键的元素列表作为值

因此,您可以按照以下步骤操作:

1.查看当前元素的(初始设置的)键是否在最终dict中。如果是,请转至步骤3

2.使用密钥更新dict

3.将新值附加到dict[key]列表中

4.重复[1-3]

你的字典有重复的键,这不合适。字典必须有唯一的键(因为它引用了键)。因此,您可以根据自己的目的使用以下实现

代码:

a={'n_name': ['APP-Ptyh ', 'Com Don Ctes - Aty ', 'Sce Fbh - Dor Node', 'kke gg - Dor Node']}
b={'n_name': ['APP-Ptyh', 'Com Don Ctes - Aty', 'Sce Fbh - Dor Nomk ', 'kke gg - Dor Node']}
c=[]

for val in a['n_name']:
    if val in b['n_name']:
        c.append(b["n_name"][b["n_name"].index(val)])

结果:

['APP-Ptyh', 'Com Don Ctes - Aty', 'kke gg - Dor Node']

这是可行的,但时间复杂度不高。如果愿意,最好给出唯一的密钥

确保字典键必须是唯一的

a={'n_name_1': 'APP-Ptyh ', 'n_name_2': 'Com Don Ctes - Aty ', 'n_name_3': 'Sce Fbh - Dor Node', 'n_name': 'kke gg - Dor Node'}
b={'n_name_1': 'APP-Ptyh', 'n_name_2': 'Com Don Ctes - Aty', 'n_name_3': 'Sce Fbh - Dor Nomk ', 'n_name': 'kke gg - Dor Node'}

def compare_value(key1, key2):
    if key1.strip() == key2.strip():
        return key1.strip()

filter(lambda x: x != None, map(compare_value, a.values(), b.values()))

>>>['APP-Ptyh', 'Com Don Ctes - Aty', 'kke gg - Dor Node']

相关问题 更多 >

    热门问题