替换字典中的键

Posted

技术标签:

【中文标题】替换字典中的键【英文标题】: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 比这更大。 【参考方案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'

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

【讨论】:

以上是关于替换字典中的键的主要内容,如果未能解决你的问题,请参考以下文章

替换字典中的键

匹配 Map 中的键时替换列值

从 json 字符串中的键字符串替换或删除 Dote (.) 以插入 mongodb

KendoUI 图表不接受 JSON 数据的键中的数字

Pandas:根据另一列的键在现有列上映射字典值以替换 NaN

java-映射到存储密钥和多种类型的键