如何基于另一个字典查找和替换一个字典中的值

2024-10-02 02:41:20 发布

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

我有两本字典,假设它们是regex = {}dict = {}

其中第一个包含find和replace模式,分别为keysvalues。看起来是这样的:

# about 50 key/value pairs
regex = {
    'find1' : 'replace1',
    'find2' : 'replace2',
    ...
    'findX' : 'replaceX'
}

第二个是这样的:

# about 500,000 key/value pairs
dict = {
    'key1' : 'value1',
    'key2' : 'value2',
    ...
    'keyX' : 'valueX'
}

对于每个keyXvalueXfrom dict我想检查valueX是否包括来自regexfindX,如果是,我想用replaceX替换它并保存到相同的(dict)或新的字典或列表(在下面的代码中使用了新的列表)

我已尝试使用以下代码:

for keyX, valueX in dict.items():
    for patterns in regex.items():
        if re.search(patterns[0], valueX)
            new_value = re.sub(patterns[0], patterns[1], valueX)

    new_line = keyX + '\t' + new_value

    new_list.append(new_line)

我的机制工作错误:对于每一个valueX,它应该检查它是否包含每一个findX中的任何一个,用replaceX替换它,保存,但是我的输出列表变得相当混乱。为不同的keyX复制new_value。我知道在我的字典(可能是regex字典)上进行迭代有问题,但我不知道如何解决这个问题


编辑(示例):

regex = {
   's t n': 's n',
   'e0': 'i0',
   'j a0': 'j i0'
}

dict = {
    'известный': 'i0 z vj e1 s t n y0 j',
    'сестра': 'sj e0 s t r a1'
    'январь': 'j a0 n v a1 rj'
}

Tags: key列表new字典valuedictregexpatterns
2条回答

您可以过滤键并将其组织为元组列表,稍后循环并相应替换您的值,如下所示:

# init vars
regex = {'s t n': 's n', 'e0': 'i0', 'j a0': 'j i0'}
d = {'известный': 'i0 z vj e1 s t n y0 j', 'сестра': 'sj e0 s t r a1', 'январь': 'j a0 n v a1 rj'}
# debug prints
print(regex)
print(d)
# get keys for replacements
import itertools
tuples = list(itertools.chain.from_iterable([[(keyx, findx) for keyx in d.keys() if findx in d[keyx]] for findx in regex.keys()]))
# loop and replace
for keyx, findx in tuples:
    d[keyx] = d[keyx].replace(findx, regex[findx])
# print output
print(d)

输出:

{'s t n': 's n', 'e0': 'i0', 'j a0': 'j i0'}
{'известный': 'i0 z vj e1 s t n y0 j', 'сестра': 'sj e0 s t r a1', 'январь': 'j a0 n v a1 rj'}
{'известный': 'i0 z vj e1 s n y0 j', 'сестра': 'sj i0 s t r a1', 'январь': 'j i0 n v a1 rj'}

尝试:

regex = {
   's t n': 's n',
   'e0': 'i0',
   'j a0': 'j i0'
}

dict = {
    'известный': 'i0 z vj e1 s t n y0 j',
    'сестра': 'sj e0 s t r a1',
    'январь': 'j a0 n v a1 rj'
}
for k1,v1 in regex.items():
    for k2,v2 in dict.items():
        if k1 in v2:
            dict[k2]=dict[k2].replace(k1,v1)

你会得到:

dict

{'известный': 'i0 z vj e1 s n y0 j',
 'сестра': 'sj i0 s t r a1',
 'январь': 'j i0 n v a1 rj'}

相关问题 更多 >

    热门问题