如何从API中将不同大小的列表合并到字典中?

2024-06-01 07:56:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个来自API的列表,我希望其中一个是键,另一个是字典的值。键和值不是均匀的,大多数键都有多个指定值;但每次我尝试将值分配给API提供给我的特定键时,我都不知道如何将键和值对齐并添加到字典中

x = response_dict['businesses']

nameL = []
c2L = []
#a2 = collections.defaultdict(list)
a = {}
a2 = {}

for biz in response_dict['businesses']:
  print(biz['name'])
  nameL.append(biz['name'])
  
  for naming in biz['categories']:
    print(naming['title'])
    c2L.append(naming['title'])

在for循环中打印print(biz['name']) and print(naming['title'])的输出:

Avalon Grille
American (New)
-----
Maggie's Blue Rose
Mexican
-----
Eatalian 
Italian
Pizza
-----
The Kettle
Diners
American (Traditional)
-----
Raffaello Ristorante
Italian
-----
Steve's Steakhouse
Steakhouses
Seafood
Bars
-----
Mi Casita
Mexican
-----
North End Caffe
American (New)
Cafes
-----
Bowl Thai
Thai
Salad
Coffee & Tea
-----
The Garden Thai Restaurant
Thai
-----
Zacatecas Restaurant
Mexican
Seafood
Breakfast & Brunch
-----
Bubba Gump Shrimp
Seafood
Southern
-----
La Pasta
Italian
Pizza
Wine Bars
-----
La Bella Napoli
Pizza
Italian
Desserts
-----
The Chowder Barge
Seafood
Bars
American (Traditional)
-----
Oh My Burger
Burgers
Salad
Tacos
-----
Gatten Sushi
Japanese
Sushi Bars
-----
The Arthur J
Steakhouses
Cocktail Bars
-----
McDonald's
Fast Food
Burgers
Coffee & Tea
-----
Chubby Rice
Chinese
Asian Fusion
-----

我希望结果采用上述词典形式:

{'Avalon Grille':['American (New)'], 'Maggie's Blue Rose':['Mexican'], 'Eatalian': ['Italian', 'Pizza'], ... 'McDonald's':['Fast Food', 'Burgers', 'Coffee & Tea']}

Tags: thenamenewfortitleprintamericannaming
3条回答

您可以通过字典理解和嵌套列表理解来实现

result = {biz['name']: [naming['title'] for naming in biz['categories']] 
          for biz in response_dict['businesses']}

您可以使用defaultdict

from collections import defaultdict
name_titles = defaultdict(list)
for biz in response_dict['businesses']:
    for naming in biz['categories']:
        name_titles[biz['name']].append(naming['title'])

或列表理解:

name_titles = {biz['name']: [naming['title'] for naming in biz['categories']] for biz in response_dict['businesses']}

假设输入与问题顶部的代码示例中使用的输入相同,您似乎在寻找类似的内容:

output = {}
for biz in response_dict["businesses"]:
    titles = []
    for category in biz["categories"]:
        titles.append(category["title"])
    output[biz["name"]] = titles

我很想用这样的理解来浓缩它:

output = {biz["name"] : [category["title"] for category in biz["categories"]] for biz in response_dict["businesses"]}

相关问题 更多 >