【问题标题】:Iterate over list of dictionaries. Pass into function遍历字典列表。传入函数
【发布时间】:2020-04-24 21:31:41
【问题描述】:

免责声明。我是 python 新手,正在努力学习。我有一个包含地址信息的字典列表,我想对其进行迭代,然后将其作为参数传递给函数。

print(data)

[{'firstName': 'John', 'lastName': 'Smith', 'address': '123 Lane', 'country': 'United States', 'state': 'TX', 'city': 'Springfield', 'zip': '12345'}, {'firstName': 'Mary', 'lastName': 'Smith', 'address': '321 Lanet', 'country': 'United States', 'state': 'Washington', 'city': 'Springfield', 'zip': '54321'}]

我遍历列表并尝试传入值,但这些值作为列表而不是单独过去。我不确定如何纠正。我仍在掌握论点和关键字论点。任何帮助和指导表示赞赏。

from usps import USPSApi, Address

input_name = [li['lastName'] for li in data]
input_address = [li['address'] for li in data]
input_city = [li['city'] for li in data]        
input_state = [li['state'] for li in data]        
input_zip = [li['zip'] for li in data]        
input_country = [li['country'] for li in data]  

address = Address(
    name = input_name,
    address_1= input_address,
    city= input_city,
    state=input_state,
    zipcode=input_zip
)
usps = USPSApi('------', test=True)
validation = usps.validate_address(address)
data_results = validation.result 
print(data_results)

【问题讨论】:

  • 请重复介绍,尤其是MRE。您发布的代码在第一个活动行失败,因为 data 未定义。我们还希望您进行基本调试:如果您在收集变量时print 您的变量,您会发现您专门制作了地址每个部分的完整列表。我不确定您认为 Address 应该为您做什么,但您非常清楚地将每个部分的整个列表分配给地址的每个字段。
  • 您似乎正在寻找现有教育材料中(部分)提供的教程帮助。 Stack Overflow 并不打算取代这些资源。
  • 您是否控制生成该字典列表的上游进程?

标签: python parameter-passing keyword-argument


【解决方案1】:

您已经拥有处理单个数据点的所有逻辑,只需使用循环将其扩展为多个数据点,如下所示。

from usps import USPSApi, Address

for item in data:
    kwargs = dict()

    kwargs['name'] = item['lastName']
    kwargs['address_1'] = item['address']
    kwargs['city'] = item['city']
    kwargs['state'] = item['state']
    kwargs['zipcode'] = item['zip']

    address = Address(**kwargs)

    usps = USPSApi('------', test=True)
    validation = usps.validate_address(address)
    data_results = validation.result 
    print(data_results)

没有语法糖就变成了

for item in data:
    kwargs = dict()

    name = item['lastName']
    address_ = item['address']
    city = item['city']
    state = item['state']
    zip_ = item['zip']

    address = Address(
        name=name,
        address_1=address_,
        city=city,
        state=state,
        zipcode=zip_)

【讨论】:

    【解决方案2】:

    如果打算在变量中获取键的值:

    d_data = [{'firstName': 'John', 'lastName': 'Smith', 'address': '123 Lane', 'country': 'United States', 'state': 'TX', 'city': 'Springfield', 'zip': '12345'}, {'firstName': 'Mary', 'lastName': 'Smith', 'address': '321 Lanet', 'country': 'United States', 'state': 'Washington', 'city': 'Springfield', 'zip': '54321'}]
    
    
    input_name = d_data[0]['lastName']
    input_address = d_data[0]['address']
    input_city = d_data[0]['city']        
    input_state = d_data[0]['state']        
    input_zip = d_data[0]['zip']        
    input_country = d_data[0]['country']
    
    print(input_name)
    print(input_address)
    print(input_city)
    print(input_zip)
    print(input_country)
    

    输出:

    John                                                                                                                          
    Smith                                                                                                                         
    123 Lane                                                                                                                      
    Springfield                                                                                                                   
    12345                                                                                                                         
    United States
    

    【讨论】:

      猜你喜欢
      • 2019-11-29
      • 2018-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多