如何从腌制字典中打印特定的 key:value 对

How to print specific key:value pairs from a pickled dictionary

我做了一个 pickled 字典,现在我只想检索与用户输入的国家相关的值。

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 组不同的信息,但我只想要 1 个国家的数据。我查找的所有内容都是关于印刷整本词典的,但我找不到任何仅谈论个人价值观的内容。我已经尝试了几乎所有关键字来在此站点上查找内容。

for countryDict in countries:
    print(countryDict[choice])

应该可以解决问题。您定义为国家/地区的变量实际上是一个字典元组(dictCont、dictPop、dictArea、dictDensity)。因此 for 循环遍历每个指令,然后从中获取选择的国家/地区。在这种情况下,countries 是一个糟糕的名称选择。我读过它并假设它是一个带有值数组的字典,因为我懒得阅读你的第二个代码块。根据经验,始终假设其他编码员是懒惰的。相信我。

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

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 上发帖。