【问题标题】:How to print specific key:value pairs from a pickled dictionary如何打印特定键:腌制字典中的值对
【发布时间】:2019-11-26 20:50:17
【问题描述】:

我制作了一个腌制字典,现在我只想检索与用户输入的国家/地区关联的值。

import pickle

choice = input("Choose a country: ")
choice.capitalize()

file_name = "nationDict.dat"
fileObject = open(file_name, 'rb')
countries = pickle.load(fileObject)
for choice in countries:
    print(choice)

我使用这个类方法来创建字典

@classmethod
    def dictMaker(cls):
        dictCont = {}
        dictPop = {}
        dictArea = {}
        dictDensity = {}
        for i in range(193):

            dictCont[Nation.country[i]] = Nation.continent[i]
            dictPop[Nation.country[i]] = Nation.population[i]
            dictArea[Nation.country[i]] = Nation.area[i]
            dictDensity[Nation.country[i]] = Nation.density[i]


        with open("nationDict.dat", 'wb') as pickUN:
            pickle.dump((dictCont, dictPop, dictArea, dictDensity), pickUN, protocol=pickle.HIGHEST_PROTOCOL)

我只想获取所选国家/地区的数据,但我不明白如何。我最终得到了每个国家的数据,虽然我确实得到了我想要的 4 组不同的信息,但我只想要一个国家的数据。我查找的所有内容都是关于打印整个词典,但我找不到任何仅谈论个人价值观的内容。我已经尝试了几乎所有关键字来在这个网站上找到东西。

【问题讨论】:

    标签: python dictionary pickle


    【解决方案1】:

    我会考虑以不同的形式存储您的国家/地区数据,例如嵌套字典:

    import pickle 
    
    countries = {
        Nation.country[i]: {
            "continent": Nation.continent[i],
            "population": Nation.population[i],
            "area": Nation.area[i],
            "density": Nation.density[i],
        }
        for i in range(193)
    }
    
    # Now you can pickle only one object:
    with open("nation_dict.dat", "wb") as fh:
        pickle.dump(countries, fh, protocol=pickle.HIGHEST_PROTOCOL)
    

    你的脚本变成:

    import pickle
    
    choice = input("Choose a country: ")
    choice.capitalize()
    
    file_name = "nationDict.dat"
    with (file_name, 'rb') as fh:
        countries = pickle.load(fileObject)
    
    print(countries.get(choice))
    # {"continent": "Europe", "population": 123456789, "area": 12345, "density": 12345}
    

    一旦您的脚本运行,我建议您在 Code Review 上发帖。

    【讨论】:

      【解决方案2】:
      for countryDict in countries:
          print(countryDict[choice])
      

      应该做的伎俩。您定义为国家的变量实际上是一个字典元组(dictCont、dictPop、dictArea、dictDensity)。所以 for 循环遍历每个字典,然后从它们那里得到选择的国家。在这种情况下,国家是一个糟糕的名称选择。我读过它并假设它是一个带有一组值的字典,因为我懒得阅读你的第二个代码块。根据经验,总是假设其他编码员是懒惰的。相信我。

      【讨论】:

      • 所以删除我的for循环,并替换打印语句?如果是这样,我之前在故障排除时遇到了一个错误:“TypeError: tuple indices must be integers or slices, not str”
      • 哦,我没有太注意你是如何腌制你的数据的。让我编辑我的回复
      • 非常感谢您提供有关编码器的信息,哈哈。我还在学习基础知识,所以感谢您的帮助!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-26
      • 2018-10-05
      • 2017-07-19
      相关资源
      最近更新 更多