【问题标题】:manipulating the contents of dictionaries inside dictionaries在字典中操作字典的内容
【发布时间】:2016-11-05 02:27:37
【问题描述】:

我正在从雷达接收不同联系人的数据。每个联系人都有一个纬度、经度、方向、范围和时间戳。并且每次点击一个联系人都会被标识,例如 1,2,3 等。对于一个联系人,这表明随着时间的推移会出现字典。因此,我的一位联系人的字典将如下所示:

{1:[data @ t1], 2:[data @ t2], 3:[data @ t3]}

随着时间的推移,字典会填满,直到……但不会只有一个联系人。会有几个,也许很多。这表明了字典的字典:

{'SSHornblower': {1:[data], 2:[data], 3:[data]},
 'Lustania': {1:[], 2:[], 3:[]},
 'Queen Mary': {1:[], 2:[], 3:[], 4:[]}} 

不可能事先知道我的雷达会找到多少个联系人,可能是 3 个,也可能是 300 个。我无法提前为所有可能的联系人和所有可能的字典的名字想出名字。因此,我想出了一个想法,一旦我将字典嵌套在更大的字典中,我就可以清除它并重新开始新的联系人。但是当我将一个嵌套在另一个中之后进行清除时,它会清除更大字典中的所有内容!有没有办法解决这个问题?

【问题讨论】:

  • 到目前为止你有什么代码?您还可以格式化您的代码/数据吗?那段文字很碍眼。
  • 你需要字典的 O(1) 访问时间吗?如果没有,您可以将联系人存储在列表中。如果您确实需要一本字典,那么您将需要一个系统来为未知联系人分配有保证的唯一标识符(可能是整数 --- 不要假设名称是唯一的)。 (另外,考虑使用列表或collections.OrderedDict 来存储雷达“ping”,因为显然使用一堆带时间戳的数据是按时间顺序对其进行迭代......并且可能会丢弃所有早于 的 ping n 秒。)
  • 不确定我是否理解您的问题。特别是,你为什么要考虑清理事情。遇到新联系人时不能在主词典中添加一个新条目吗?

标签: python dictionary nested


【解决方案1】:

对于填充嵌套字典,defaultdict 非常有用。

假设您有一个返回三个值的函数radar()

  1. 联系人姓名
  2. contact_id
  3. contact_data

那么下面的就可以了:

from collections import defaultdict

store = defaultdict(dict)

while True:
    contact_name, contact_id, contact_data = radar()
    store[contact_name][contact_id] = contact_data

因此,即使store 中尚不存在新的contact_name,defaultdict 的魔力将确保在您使用新密钥访问store 时已经存在空的嵌套字典.因此store[new_contact_name][new_contact_id] = new_contact_data 会起作用。

【讨论】:

    猜你喜欢
    • 2020-01-02
    • 1970-01-01
    • 2018-05-10
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 2018-08-11
    • 1970-01-01
    相关资源
    最近更新 更多