【问题标题】:Initializing python3 dict with kv at end最后用 kv 初始化 python3 dict
【发布时间】:2020-05-24 02:17:18
【问题描述】:

在 python3 中,(特别是 3.6 以后的版本)字典保持排序,这很棒。但是,我想用“最后”的 kv 对初始化一个字典。例如:

>>> data = {
    'Z': []
    # 'from': ['tos'], // adjacency list
}
>>> data['a']='b'
>>> data['b']='c'

>>> data
{'Z': [], 'a': 'b', 'b': 'c'}

这可能吗?我想要的如下:

>>> data
{'a': 'b', 'b': 'c', 'Z': []} # 'Z' is the last element

【问题讨论】:

  • 你的方法有什么问题..?
  • @yatu 最后我要 Z
  • 可以只反转字典然后得到那个顺序
  • 我不明白,你想倒字典吗?或者你想这样启动它?当然两者都是可能的
  • 常规dict 没有OrderedDict.move_to_end() 方法(还没有)如果这是您的问题

标签: python python-3.x


【解决方案1】:

我不能 100% 确定我是否了解您想要做什么,但是否是这样的:

from collections import OrderedDict
data = OrderedDict({
    'Z': []
})

def add_to_dict(key, value): 
    data[key] = value
    data.move_to_end('Z')

add_to_dict('a', 'b')
print(data).  # OrderedDict([('a', 'b'), ('Z', [])])

【讨论】:

【解决方案2】:
class CustomDict(dict):
    def move_to_end(self, key):
        value = self[key]
        del self[key]
        self[key] = value


d = CustomDict({"z": [], "hey": "world"})
d.move_to_end("z")
print(d)

输出:

{'hey': 'world', 'z': []}

您还可以创建自定义 dict 对象以自动将键 z 放置到末尾,但这需要更多工作。查看此帖子here 以供参考。

【讨论】:

    【解决方案3】:

    不确定您是否指的是在添加新数据后反转字典中的数据,即新的 k,v 对,但这是您可以添加到当前字典的方式:

    class storeDict(dict):
    
        def __init__(self):
           self = dict()
    
        def add(self, key, value):
           self[key] = value
    
        # create instance of class storeDict
        newDict = storeDict()
        newDict.add('apples', 1)
        newDict.add('oranges', 2)
    

    这只是一个示例,可以适用于您的问题。希望有帮助:)

    【讨论】:

      猜你喜欢
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-04
      • 1970-01-01
      • 2023-04-02
      相关资源
      最近更新 更多