如何从腌制字典中打印特定的 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 上发帖。
我做了一个 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 上发帖。