【问题标题】:How to iterate through a list in a dictionary in python如何在python中遍历字典中的列表
【发布时间】:2015-03-13 04:27:35
【问题描述】:
sampleDict={ “A1”:[“234-234-2234”, [“Brown”, “Bill”] ], “B2”:[“654-564-5564”,[“Jones”,”Jennifer”]] }

我必须检查一下"john"是否在字典中,并打印电话号码以"654"开头的每个人的名字和姓氏

我的代码是:

for i in sampleDict.keys():    
    for key in sampleDict[i]:
        print(key)

以及如何打印列表中的姓氏:“棕色”

【问题讨论】:

  • 那么你的代码有什么问题?
  • 您缺少 sampleDict['B2'] 列表的右括号。
  • 代码工作正常,但我无法遍历字典中的键,例如,如果我只想打印出该人的姓氏
  • 我认为您使用的术语key 的含义可能与它用于 Python 字典的含义不同。在您的sampleDict 中,键是"A1""B2",而值是[“234-234-2234”, [“Brown”, “Bill”] ] 等。

标签: python list dictionary iteration


【解决方案1】:

一般来说,您可以通过列表索引访问字典值的不同部分:

for (k,v) in sampleDict.iteritems():
    key          = k
    phone_number = v[0]
    last_name    = v[1][0]
    first_name   = v[1][0]
    # Do something

每个值只是一个 2 元素列表,第一个元素对应于电话号码,第二个元素本身就是一个列表,元素对应于姓氏和名字。

但是您可以编写您正在寻找的函数,例如:

def is_john_here(d):
    for v in d.values():
        if v[1][1] == "john": return True
    return False

print is_john_here(sampleDict)  # False

或者

def find_people_by_number(d, prefix):
    for v in d.values():
        if v[0].startswith(prefix):
            print ', '.join(v[1])

find_people_by_number(sampleDict, '654')  # Jones, Jennifer

或者(来自 cmets)

def last_names(d):
    for v in d.values():
        print v[1][0]

last_names(sampleDict)    # Brown
                          # Jones

【讨论】:

    【解决方案2】:

    看来你不关心key

    for values in sampleDict.values():
        lname = values[1][0] # Assuming that last name is always the first element
        fname = values[1][1] # Assuming that first name is always the second element
        # Checking if `name` is in names list
        if 'john' in values[1]:
            # do whatever
    

    【讨论】:

    • 谢谢@slik,我可以获取代码以仅打印字典中键的姓氏
    • Np。正如 Jedwards 提到的,您可以访问字典的某些部分。我也会更新我的答案
    猜你喜欢
    • 2012-07-07
    • 2023-03-14
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 2018-01-01
    • 2023-02-23
    • 2021-03-19
    • 2016-06-22
    相关资源
    最近更新 更多