繁体   English   中英

需要帮助遍历python字典值

[英]Need help iterating over python dictionary values

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

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

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

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个密度值

我要说的一个大问题是如何处理值中的元素对字典的搜索。 我还考虑过使用以continent元素为键的临时字典,但是我不确定这样做是否会使我的生活变得更轻松,因为我必须对其执行popDensity方法。

任何帮助表示赞赏,谢谢!

  1. 初始化熊猫系列对象
  2. 遍历字典。
  3. 如果大陆匹配:

    一种。 计算人口密度。

    b。 如果该值大于熊猫系列中的最小值:

    一世。 删除最后一个条目

    ii。将该值添加到熊猫系列值中,并将国家/地区添加到索引中

    iii。 排序熊猫系列对象升序= False

如果您要重复执行此操作,那么创建一个continent-> country词典肯定会节省时间。

很高兴这很有帮助。 我将其添加为答案,以便您可以接受。

就像列表理解一样,字典理解也一样……这很酷! d2 = {k:d[k] for k in d.keys() if <some_elem> in d[k]}将为您提供一个包含满足您要求的原始dict子集的dict。 您将必须<some_elem> in d[k]部分中填写<some_elem> in d[k] ,因为我没有遍历所有代码。 您说这是您的主要问题。 希望这能给您足够的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM