【问题标题】:How to change only the last repeated value from a list of dictionaries?如何仅更改字典列表中最后一个重复的值?
【发布时间】:2019-12-24 04:36:11
【问题描述】:

基本上我只想从上面两个循环中定义 key1 和 key2 的 'Flag' 键中更改最后一个键 'name' 重复值。

我正在尝试执行以下操作(但我找不到有效的方法):

       for i in range(len(messages)):
           if messages[i]['name'] == data[key1]:
               messages[i]['Flag']=2
           elif messages[i]['name'] == data[key2]:
               messages[i]['Flag']=2

【问题讨论】:

  • 您能否提供一个可重现的示例来说明您要实现的目标?消息的结构是什么,期望的输出是什么。
  • 非常不清楚。什么是messages,什么是data?看起来你做得很好......你是否试图检查name是否作为data中的值存在?然后就做:if messages[i]['name'] in data.values()
  • 是的,然后我只想替换最后一个重复的。
  • 还是很不清楚……最后一次重复是什么意思?
  • 重复的地方很多所以最后一个我要改键Flag

标签: python optimization


【解决方案1】:

如果您只想更改符合约束的最后一个字典,则向后循环并在第一次出现时更改字典并跳出循环

for i in range(len(messages), 0, -1):
       if messages[i]['name'] in (data[key1], data[key2]):
           messages[i]['Flag'] = 2
           break

【讨论】:

    【解决方案2】:

    从发布的代码中,我假设 messages 是一个字典列表。

    key_list = [data[key1], data[key2]]
    for msg in messages:
       if msg['name'] in key_kist:
          msg['Flag'] = 2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-16
      • 2020-04-02
      • 2021-04-26
      • 1970-01-01
      相关资源
      最近更新 更多