我正在编写一个程序来搜索字典值集,并对与用户输入匹配的值执行方法。我必须对这些值进行比较和排序。
这是我现在正在使用的代码
值搜索和比较代码(非常粗略)
import nation
import pickle
KK = 1000000
pickle_in = open("nationsDict.dat","rb")
d = pickle.load(pickle_in)
k = raw_input("Enter a continent: ")
for value in d.values():
if k in d.values()[0]:
print d.values()[0]
国家级代码
class Nations:
KK = 1000000
def __init__(self, ctry, cont, pop, area):
self.country = ctry
self.continent = cont
self.population = float(pop)
self.area = float(area)
def popDensity(self):
popDensity = (self.population*self.KK) / self.area
popDensity = str(round(popDensity, 2))
return popDensity
创建泡菜词典的代码
import nation
import pickle
i=0
dictUN = {}
with open('UN.txt') as f:
for line in f:
"""Data get from file"""
elements = line.strip().split(",")
n = nation.Nations(elements[0],elements[1],elements[2],elements[3])
"""Density"""
n.popDensity()
print "The density of", n.country, "is",n.popDensity(),"people per square mile."
"""Dictionary creation"""
dictVal = (n.continent, n.population, n.area)
dictUN.update({n.country: dictVal})
pickle_out = open("nationsDict.dat", "wb")
pickle.dump(dictUN, pickle_out)
pickle_out.close()
这是UN.txt的片段
Mauritania,Africa,3.5,397954
Mauritius,Africa,1.3,787
Mexico,North America,120.3,761606
Micronesia,Australia/Oceania,.11,271
Monaco,Europe,.031,0.76
Mongolia,Asia,3.0,603909
Montenegro,Europe,.65,5019
Morocco,Africa,33.0,172414
此时我的问题非常包含在值搜索和比较中。具体来说,我的程序必须
我想说一个大问题是如何通过值中的元素来处理字典的搜索。我还考虑过用大陆元素作为关键字制作一个临时词典,但是我不确定这会让我的生活变得更容易,因为我必须对它执行popDensity方法。
感谢任何帮助,谢谢!
答案 0 :(得分:0)
如果大陆匹配:
一个。计算人口密度。
湾如果该值大于pandas系列中的最小值:
我。删除最后一个条目
ii。将值添加到pandas系列值中,将国家/地区添加到索引
III。排序pandas系列对象ascending = False
如果你要重复这样做,那么创建一个大陆 - >国家字典肯定会节省时间。
答案 1 :(得分:0)
很高兴这很有帮助。我会将其添加为答案,如果您愿意,可以接受它。
正如列表理解一样,有词典理解......这很酷的东西! e1
会给你一个dict,其中包含满足你要求的原始字典的子集。您必须填写d2 = {k:d[k] for k in d.keys() if <some_elem> in d[k]}
部分,因为我还没有完成您的所有代码。你说这是你的主要问题。希望这足以让你解决它。