替换字典中的键
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
替换为append
、s
替换为see
、h
替换为horse
、e
替换为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'
您可以遍历键并根据需要更改它们。
【讨论】:
以上是关于替换字典中的键的主要内容,如果未能解决你的问题,请参考以下文章
从 json 字符串中的键字符串替换或删除 Dote (.) 以插入 mongodb