【问题标题】:How can I loop through a python dictionary and replace a substring value?如何遍历 python 字典并替换子字符串值?
【发布时间】:2019-05-29 11:28:46
【问题描述】:

我想循环使用未知键的字典并替换特定的子字符串值。

mydict = {
    'Getting links from: https://www.foo.com/': 
    [
        '+-BROKEN- http://www.broken.com/',
        '+---OK--- http://www.set.com/',
        '+---OK--- http://www.one.com/'
    ],
    'Getting links from: https://www.bar.com/': 
    [
        '+-BROKEN- http://www.broken.com/'
    ]
}

val = "+-BROKEN-"

for k, v in mydict.iteritems():
   if v.contains(val):
     v.replace(val, '')

我想要的结果是:

{
    'Getting links from: https://www.foo.com/':
    [
        'http://www.broken.com/',
        '+---OK--- http://www.set.com/',
        '+---OK--- http://www.one.com/'
    ], 
    'Getting links from: https://www.bar.com/': 
    [
        'http://www.broken.com/'
    ]
}

如何遍历字典并替换特定的子字符串值?

【问题讨论】:

    标签: python string python-2.7 dictionary replace


    【解决方案1】:

    假设您的字典值都是包含字符串的列表,并且您想从包含它的任何字符串中删除该值,您可以尝试:

    for k, v in mydict.iteritems():
        mydict[k] = [string.replace(val,'')] for string in v]
    

    【讨论】:

      【解决方案2】:

      它没有像您期望的那样工作,因为v 是一个列表,而不是单个字符串。因此,v.contains(val) 始终为False。完成您所描述的一种方法是:

      for k, v in mydict.iteritems():
        for i, s in enumerate(v):
          if val in s:
            v[i] = s.replace(val, '')
      

      【讨论】:

      • 这看起来很棒。但是,我遇到了一个错误,因为字符串中有一个奇怪的字符:├─BROKEN─错误是:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128) I试过 s = '├─BROKEN─' val = unicode(s, "utf-8") 但同样的错误。有什么建议吗?我正在使用 2.7
      • 你可以试试s = u'├─BROKEN─' 看看是否对你有用。您也可以尝试查找包含要替换的值的示例并根据子字符串分配它。例如,val = mydict.values()[0][0][:10] 可以获取字典中第一个列表中第一个条目的前十个字符。
      猜你喜欢
      • 1970-01-01
      • 2020-12-13
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-17
      • 2019-06-06
      相关资源
      最近更新 更多