需要帮助迭代python字典值

时间:2017-12-05 00:01:02

标签: python dictionary search

我正在编写一个程序来搜索字典值集,并对与用户输入匹配的值执行方法。我必须对这些值进行比较和排序。

这是我现在正在使用的代码

值搜索和比较代码(非常粗略)

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

此时我的问题非常包含在值搜索和比较中。具体来说,我的程序必须

  1. 允许用户搜索大陆(值列表中的第一个元素)
  2. 在所有匹配国家/地区执行方法,Nations.popDensity(包含在国家/地区类别中)
  3. 比较各国并返回每个大陆的前5个密度值
  4. 我想说一个大问题是如何通过值中的元素来处理字典的搜索。我还考虑过用大陆元素作为关键字制作一个临时词典,但是我不确定这会让我的生活变得更容易,因为我必须对它执行popDensity方法。

    感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:0)

  1. 初始化pandas系列对象
  2. 浏览字典。
  3. 如果大陆匹配:

    一个。计算人口密度。

    湾如果该值大于pandas系列中的最小值:

    我。删除最后一个条目

    ii。将值添加到pandas系列值中,将国家/地区添加到索引

    III。排序pandas系列对象ascending = False

  4. 如果你要重复这样做,那么创建一个大陆 - >国家字典肯定会节省时间。

答案 1 :(得分:0)

很高兴这很有帮助。我会将其添加为答案,如果您愿意,可以接受它。

正如列表理解一样,有词典理解......这很酷的东西! e1会给你一个dict,其中包含满足你要求的原始字典的子集。您必须填写d2 = {k:d[k] for k in d.keys() if <some_elem> in d[k]}部分,因为我还没有完成您的所有代码。你说这是你的主要问题。希望这足以让你解决它。