【问题标题】:Insert Variable Dictionary Values to db将变量字典值插入到 db
【发布时间】:2012-11-12 15:53:28
【问题描述】:

我有一本字典,其键和值是从互联网更新的。该字典在每次更新时(出于某种原因)不断更改其键/变量的位置和数量,但键的名称和值的格式保持不变。最初,我将它的键和值转换为不同的数组,并通过跟踪它们的数组位置将它们的值存储到数据库中,但是在我发现它的可变性之后,它不再可能像我一样做,因为 len(dictionary ) 不断变化。字典项在每次更新时从一个 url 中获取,有时会给我 31 个项(每个项是键:值),有时在字典中给我 3、29、28 甚至 27 个项。因此,我对一些“始终存在”的项目进行了概括,现在我想在每次更新时提取它们,但不是根据它们的顺序,而是根据它们的键。它更像是:我需要在字典中搜索特定的关键字并将其对应的值保存到变量中。例如,在一次更新中,它的键是:

>>> len(dict.keys())
>>> 30

关于另一个更新:

>>> len(dict.keys())
>>> 26

这表明字典中的项目数不断变化。但是,我已经注意到一些强制性密钥的列表(我将在下面提到),它们总是在那里,所以我只需要在事物更新时查找它们。更准确地说,我需要一种方法来从字典中提取特定键(可能通过搜索)及其对应的值,并将它们保存到不同的变量中,以便我可以将它们保存到数据库中。要搜索的键是:

  • temp_f
  • 相对湿度
  • wind_dir
  • pressure_mb
  • 位置

谢谢。

【问题讨论】:

  • 您正在寻找OrderedDict(),无需在字典中搜索关键字,只需搜索if key in dict
  • 怎么样?我认为它更多地用于排序并且不允许我搜索特定的键..或者是吗?
  • 无需在字典中查找某个键,一个简单的if key in dict就可以告诉您该键是否存在。
  • 您使用 dict 不是为它设计的。 dict 是将键与值相关联,并且没有真正的内在工具来搜索键而不必遍历整个键列表。
  • @khan,您需要向我们展示您的一些代码和数据结构,以便更清楚地了解您在这里要做什么。

标签: python arrays dictionary


【解决方案1】:

如果我很好地理解了您的问题,您不需要维护字典中键/值的顺序,您只需从字典中删除不需要的键并重命名您感兴趣的键。您担心的是一些键也可能丢失。我会这样解决。

new_dict = {
    'tf' : original_dict.get('temp_f', None),
    'rh' : original_dict.get('relative_humidity', None),
     # And so on...
}

【讨论】:

  • 你成功了,兄弟!你成功了。
  • 如果您确定您列出的密钥始终存在,您可以使用original_dict['temp_f'] 而不是original_dict.get('temp_f', None)
  • 一件小事:我可以绕过代码中的类型错误吗?在我尝试提取时存在一些类型错误,那么有没有一种方法可以绕过类型错误并继续执行代码?
  • 当然,你可以这样做。 try:;#your code; except TypeError:;pass。抱歉,不能在 cmets 中添加换行符,请替换;带有换行符。
【解决方案2】:

如果要保持顺序,请使用collections.OrderedDict,而不是普通的dict

【讨论】:

  • 这与顺序无关...每次更新时都会从 url 获取字典项,有时会给我 31 项(每个项是键:值),有时会给我 3、29 ,字典中有 28 个甚至 27 个条目。因此,我对一些“始终存在”的项目进行了概括,现在我想在每次更新时提取它们,但不是根据它们的顺序,而是根据它们的键。它更像是:我需要在字典中搜索特定的关键字并将其对应的值保存到变量中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-10
  • 2018-10-27
  • 2016-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多