字典按值查找并根据位置返回排名?

时间:2018-10-02 16:57:34

标签: python pandas

我的基本数据是一个字典,其中的键是国家/地区,值是从0到9位置的名称的列表。

#base data
data
{'Newyork': ['Don Willis',
           'Lewis Hamilton',
           'Kimi Raikkonen',
           'Daniel Ricciardo',
           'Fernando Alonso',
           'Max Verstappen',
           'Nico Hulkenberg',
           'Valtteri Bottas',
           'Stoffel Vandoorne',
           'Carlos Sainz'],
'Chicago': ['Don Willis',
           'Fernando Alonso',...
  

find_city(名称,等级)应给出参赛者的姓名和等级(数字等级1为索引位置0),并返回参赛者获得特定等级的所有城市的列表。

find_city("Don Willis", 1) == ["Newyork", "Chicago", "Miami"]
find_city("Lewis Hamilton", 6) == [] #None because Lewis Hamilton never ranked 6 in any of city

到目前为止,这是我的尝试,但没有太大进展。有帮助吗?

def find_city(name, rank):
    data.get("Newyork",None)
    b=[]
    for i in enumerate(a):
        b.append(i)
    for (i,v) in b:

4 个答案:

答案 0 :(得分:0)

怎么样?

def find_city(name, rank):
    city_list = []

    for c, l in data.iteritems():
        if l[rank - 1] == name:
            city_list.append(c)

    return city_list

这将循环遍历数据字典中的每个key:value,并检查该城市的结果列表中索引位置处的值(排名为-1,因为列表被零索引,而F-1驱动程序未归零)是否与name。如果是,则将密钥(城市名称)附加到city_list。

完成后,它将返回城市列表,或者如果没有找到,则返回一个空列表。

答案 1 :(得分:0)

您不必在此处进行枚举,因为索引仅偏移了一个,我们可以从等级中减去1并查找该值

def find_city(name, rank):
    l = [k for k in data if data[k][rank - 1] == name]
    if len(l) == 0:
        return None
    return l

答案 2 :(得分:0)

在解决其中一些编程难题时,请尝试考虑是否可以用另一种方式重新构造当前的问题或任务。

一种更具体或更简单的任务框架方式是:

  

创建一个函数,该函数应检查字典的每个键处的列表(如果特定索引上存在值)。

data = {...}
def find_city(name, rank):
    keys = []
    for key in data:
        if len(data[key]) < rank:
            raise Exception("You tried to reach an index out of bounds")
        if data[key][rank-1] == name:
            keys.append(key)
    return keys

答案 3 :(得分:0)

def find_city(name, rank):
    for i in data:
        try:
             if data[i].index(name) == rank - 1:
                yield i
        except ValueError:
             pass

遍历数据,如果列表数据[i]的名称为-1,则“屈服” 我使用了try,因为如果名称不在数据中,则会引发ValueError并且程序崩溃 附言yield返回一个类似生成器的对象,因此在接收到输出后,应使用list()函数将其转换为列表