用for循环替换JSON列表中的Python?

2024-05-19 08:36:16 发布

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

我对python 3非常陌生,我正在开发一个REST API来格式化JSON中的一些字符,JSON包含许多字符串(有时数千个),JSON具有以下结构:

  [
  [
    "city",
    "Street 158 No 96"
  ],
  [
    "city",
    "st 144 11a 11 ap 104"
  ],
  [
    "city",
    "Street83 # 85  - 22"
  ],
  [
    "city",
    "str13 #153  -  81"
  ],
  [
    "city",
    "street1h # 24 - 29"
  ]
]

因此,我在excel宏上替换它的方法是

text = Replace(text, "st", " street ", , , vbTextCompare)
For i = 0 To 9 Step 1
    text = Replace(text, "street" & i, " street " & i, , , vbTextCompare)
    text = Replace(text, "st" & i, " street " & i, , , vbTextCompare)

这会将每个单元格的格式设置为“street#”,无论数字是多少,现在的问题是,当我尝试使用python执行此操作时,现在我已经学会了如何替换列表中的多个值,如下所示:

addressList= []
for address in request.json:

    address = [element

    .replace('st', 'street ')
    .replace('street1­', 'street 1')
    .replace('street2', 'street 2')
    .replace('street3', 'street 3')
    .replace('street4', 'street 4')
    .replace('street5­', 'street 5')
     

     #and so on for st too

    for element in address]

    addressList.append(address)

这种方法不仅很长而且很难看,我想做一些像以前一样的事情,但是我似乎不能用a来替换内部,我应该在外部做吗

谢谢你的帮助

--编辑--

编辑json格式,使其有效

尝试了revliscano和第四只鸟的回复,它们都有效,目前我使用revliscano的方法,因为它允许我在“一行”内从原始Json创建列表


Tags: 方法textinjsonstreetcity列表for
3条回答

我会用正则表达式来解决这个问题。尝试以下方法

import re

address_list = [[re.sub(r'(?:st ?(\d)?\b)|(?:street(\d))', r'street \1', element)
                for element in address]
                for address in request.json]

您可以使用模式匹配st和可选reet以及可选空格,而不是使用多个替换调用,然后在组中捕获1+个数字

\bst(?:reet)? ?(\d+)\b

Regex demoPython demo

在替换中,使用re.sub使用捕获组street \1

单个元素的示例代码

import re
element = re.sub(r"\bst(?:reet)? ?(\d+)\b", r"street \1", "st 5")
print (element)

输出

street 5

您可以将正则表达式与字典混合使用,以加快速度

我在我的一个程序中使用了这样的函数

import re
def multiple_replace(adict, text):
    regex = re.compile("|".join(map(re.escape, adict.keys())))   
    return regex.sub(lambda match: adict[match.group(0)], text)

adict是一个字典,其中包含要替换的字符的映射

对你来说,这是可能的

adict = {
    'street1­': 'street 1'
    'street2':'street 2',
    'street3': 'street 3',
    'street4': 'street 4',
    'street5­': 'street 5',
}

当然,不能使用完全相同的函数。您必须根据需要编写另一个正则表达式,就像@The fourth bird所做的那样

相关问题 更多 >

    热门问题