【问题标题】:Replace keys in a dictionary替换字典中的键
【发布时间】:2015-12-13 21:56:13
【问题描述】:

我有一本字典

event_types={"as":0,"ah":0,"es":0,"eh":0,"os":0,"oh":0,"cs":0,"ch":0}

如何将a 替换为appends 替换为seeh 替换为horsee 替换为exp,并在两者之间使用空格。

输出类似:

{"append see":0,"append horse":0,"exp horse":0....}

【问题讨论】:

  • 如果您的列表太短,您就不能删除您的条目并重新创建新条目吗?
  • @JulienBernu 比这更大。

标签: python string python-2.7 dictionary


【解决方案1】:

有另一个字典来代替你,像这样

keys = {"a": "append", "h": "horse", "e": "exp", "s": "see"}

现在,如果你的活动是这样的

event_types = {"as": 0, "ah": 0, "es": 0, "eh": 0}

简单地用字典理解重构它,像这样

>>> {" ".join([keys[char] for char in k]): v for k, v in event_types.items()}   
{'exp see': 0, 'exp horse': 0, 'append see': 0, 'append horse': 0}

这里," ".join([keys[char] for char in k]),迭代k中的字符,从keys字典中获取对应的单词并形成一个列表。然后,将列表中的元素用空格字符连接起来,得到想要的键。

【讨论】:

  • 不需要列表理解:" ".join([keys[char] for char in k]) -> " ".join(keys[char] for char in k)
  • @warvariuc 与 gen exp 的连接通常较慢。这就是为什么我总是更喜欢列表理解
  • 此解决方案假定所有旧键都将被替换,而不仅仅是两个字母变体。只是注意到这一点,因为 OP 没有对此发表任何评论
【解决方案2】:

首先创建一个映射字典,将单个字母映射到单词:

mm={"a":"append", "s":"see","h":"horse","e":"exp","c":"corn","o":"ocelot"}

然后将您的输入字典转换为键、值元组列表,使用映射字典重写键并创建一个由新键、原始值组成的新元组列表,最后将元组列表转换为字典。

dict(map(lambda e: ("%s %s" % (mm[e[0][0]], mm[e[0][1]]), e[1]), event_types.items()))

【讨论】:

    【解决方案3】:

    迭代原始字典的键和值,转换键,然后使用转换后的键将值存储在结果字典中。要转换键,映射其字符,在映射字典 ({ "a" : "append", ... }) 中查找替换,然后用空格连接。

    【讨论】:

      【解决方案4】:

      不确定是否可以追加,但可以执行以下一行:

      >>> dict={}
      >>> dict={"a":"b"}
      >>> dict["aha"]=dict.pop("a")
      >>> dict
      {'aha': 'b'}
      

      您可以遍历键并根据需要更改它们。

      【讨论】: