【问题标题】:Replacing list values with dictionary values用字典值替换列表值
【发布时间】:2020-07-11 01:42:10
【问题描述】:

我有一个示例代码似乎不能正常工作,我在网上尝试了不同的解决方案但都失败了。

我有一个名为 lv 的列表,它会删除网站并返回动态的特殊 div(每次运行代码时都会更改)。

lv = ['div5', 'div3', 'div4', 'div1', 'div2']

我有一个名为nv 的列表,其中包含要替换的文本类型,

nv = ['div1', 'div2', 'div3', 'div4', 'div5']

我还有一个名为 mm 的字典,它将 nv 值设置为一些值

mm = {nv[0]:'type1',nv[1]:'type2',nv[2]:'type3', nv[3]:'type4',  nv[4]:'type5'}

现在我想使用 inde 方法将结果打印为 lv[0:5],并且对于其中的每个值,它应该检查该值是否对应于 nv 值,然后将该值替换为字典值

print(lv[0:5])
#output should be like this
'type1','type3','type4','type2', 'type1'

这是我的完整原始源代码:

'''蟒蛇

    lv = [l for l in cur.find_all(id=levels)]

    nv = [
        '<div id="map-innercontainer-weak3" style="background-image:none"> </div>',
        '<div id="map-innercontainer-strong3"> </div>',
        '<div id="map-innercontainer-strong2"> </div>',
        '<div id="map-innercontainer-strong1"> </div>',
        '<div id="map-innercontainer-weak1"> </div>',
        '<div id="map-innercontainer-weak2"> </div>',
        '<div id="map-innercontainer-weak3"> </div>',
    ]

    mm = {
        nv[0]:'',
        nv[1]:'Strong3',
        nv[2]:'Strong2',
        nv[3]:'Strong1',
        nv[4]:'Weak1',
        nv[5]:'Weak2',
        nv[6]:'Weak3',
    }


    # #Show out the results to the user
    print(f'Currency\t\tStrength\n')
    print(f'{pairs[0].text}\t\t\t{lv[0:6]}\n')
    print(f'{pairs[1].text}\t\t\t{lv[6:12]}\n')
    print(f'{pairs[2].text}\t\t\t{lv[12:18]}\n')
    print(f'{pairs[3].text}\t\t\t{lv[18:24]}\n')
    print(f'{pairs[4].text}\t\t\t{lv[24:30]}\n')
    print(f'{pairs[5].text}\t\t\t{lv[30:36]}\n')

它会输出这个,但我想用 DICT 值替换 DIVS

    Currency        Strength

    EURO            [<div id="map-innercontainer-weak3" style="background-image:none"> </div>, <div id="map-innercontainer-weak3" style="background-image:none"> </div>, <div id="map-innercontainer-weak3" style="background-image:none"> </div>, <div id="map-innercontainer-weak3" style="background-image:none"> </div>, <div id="map-innercontainer-weak3" style="background-image:none"> </div>, <div id="map-innercontainer-weak3"> </div>]

【问题讨论】:

  • 您实际尝试过什么来解决这个问题?
  • 我正在尝试废弃一个网站,它的 div 是不变的,只是它们会随着时间而变化
  • 我了解您的问题,希望能展示您为实际解决自己的问题所做的努力。顺便说一句,您的预期输出与您描述的不符
  • 我已经编辑了我的问题以展示我的努力

标签: python


【解决方案1】:

这是列表理解的一个很好的用例,例如使用以下代码:

print([ mm[item] for item in lv ])

这样做是按顺序(如您所描述的)循环遍历 lv 的所有元素,并打印一个列表,其中列表的每个元素都是 lv 中相应元素作为键的值。

【讨论】:

    【解决方案2】:

    我做了一个简单的 for 循环来尝试解决这个问题。它循环遍历 lv 列表的长度,并将每个 lv 项设置为字典中的对应项。

    for i in range(len(lv)):
        lv[i] = mm[lv[i]]
    

    输出: ['type5', 'type3', 'type4', 'type1', 'type2']

    【讨论】:

      【解决方案3】:

      我终于想通了,我用这两个函数来删除多个字符串

      def multiple_replacer(*key_values):
          replace_dict = dict(key_values)
          replacement_function = lambda match: replace_dict[match.group(0)]
          pattern = re.compile("|".join([re.escape(k) for k, v in key_values]), re.M)
          return lambda string: pattern.sub(replacement_function, string)
      
      def multiple_replace(string, *key_values):
          return multiple_replacer(*key_values)(string)
      

      现在输出给了我想要的。

      EURO            [ weak3  ,  weak3  ,  weak3  ,  weak3  ,  weak2 ,  weak3 ]
      

      【讨论】:

        猜你喜欢
        • 2019-04-07
        • 1970-01-01
        • 2021-09-22
        • 2023-03-10
        • 2018-03-08
        • 1970-01-01
        • 2018-02-08
        • 2021-11-18
        相关资源
        最近更新 更多