python中字典和列表的相互嵌套问题

在学习过程中遇到了很多小麻烦,所以将字典列表的循环嵌套问题,进行了个浅浅的总结分类。

  1. 列表中存储字典
  2. 字典中存储列表
  3. 字典中存储字典
  4. 易错点

首先明确:

①访问字典中的元素:dict_name[key]  /  dict_name.get(key)
②访问列表中的元素:list_name[索引]
  1. 1.列表中存储字典:

  • ①列表中存储多个字典

p={'name':'lin','age':21}
y={'name':'xue','age':20}
c=[p,y]
print(c)
  1. 输出结果:
    [{'name': 'Jonh', 'age': 18}, {'name': 'Marry', 'age': 19}]
  2. ②访问列表中字典的值

  3. print(f"person's name is {people[0].get('name')}")
    print(f"{people[1].get('name')}'s age is {people[1].get('age')}")
    #先用person[0/1]访问列表里的元素(字典),再用get方法访问字典里的值

    输出结果:

    person's name is Jonh
    Marry's age is 19
  4. ③遍历访问多个值

for person in people:                                            
#将列表中的字典,依次赋值给person                       
    print(f"{person['name']}'s age is {person['age']}")          
    #取出每个循环里变量person(字典)的键和值

 输出结果:

Jonh's age is 18
Marry's age is 19

 因为字典中有多个键值对,所以进行多层嵌套。

外层嵌套访问列表中的每个字典,内层嵌套访问每个字典元素的键值对。

for person in people:    
    #在每个遍历的字典里再进行嵌套(内层循环)
    for k,v in person.items():          
        print(f"{k}:{v}")

输出结果:

name:Jonh
age:18
name:Marry
age:19

2.字典中存储列表

①访问字典中的列表元素

先用list[索引]访问列表中的元素,用dict[key]方法访问字典中的值。

favourite_places={
    'lin':['beijing','tianjin'],
    'jing':['chengdu','leshan'],
    'huang':['shenzhen']
}
#访问字典中的值可以用:dict_name[key]
print(favourite_places['lin'])
#访问列表里面的元素用索引:list_name[索引]
print(favourite_places['lin'][0].title())

输出结果: 

['beijing', 'tianjin']
Beijing

循环访问字典中列表的元素,也是要用dict_name[key]先访问字典中的值(列表)

for i in favourite_places['lin']:     
    print(i.title())

输出结果:

Beijing
Tianjin

②访问字典中的值(字典中的值为列表)

注意:直接访问字典中的值,会以列表的形式呈现。

for name,place in favourite_places.items():
    print(f"{name.title()}'s favourite places are {place}")

 输出结果:

Lin's favourite places are ['beijing', 'tianjin']
Jing's favourite places are ['chengdu', 'leshan']
Huang's favourite places are ['shenzhen']

为了避免,要进行循环嵌套

for names,places in favourite_places.items():  #对三个键值对先进行一个大循环
    print(f'{names.title()} favourite places are:') #在大循环里每一组键值对开头先打印这句话
    for place in places:      #之后再对值进行一个小循环,打印出值中的每个元素
        print(place.title())

输出结果:

Lin favourite places are:
Beijing
Tianjin
Jing favourite places are:
Chengdu
Leshan
Huang favourite places are:
Shenzhen

3.字典中存储字典

①字典中不能全部由字典元素组成,会报错。

p={'name':'lin','age':21}
y={'name':'xue','age':20}
c={p,y}
print(c)
TypeError                                 Traceback (most recent call last)
<ipython-input-46-4127ab9ea962> in <module>
      1 p={'name':'lin','age':21}
      2 y={'name':'xue','age':20}
----> 3 c={p,y}
      4 print(c)

TypeError: unhashable type: 'dict'

②字典中的值可由字典组成

users={
    'a':{'name':'lin','age':21},
    'b':{'name':'xue','age':20}
}
print('-----------直接访问输出-------------------')
print(users['a']['name'],users['a']['age'])
print(users['b']['name'],users['b']['age'])
print('\n-----------循环嵌套的方法输出-------------------')
for username,userinfo in users.items():
    print('\n'+username+':')
    for name,age in userinfo.items():
        print(name,age)

输出结果:

-----------直接访问输出-------------------
lin 21
xue 20

-----------循环嵌套的方法输出-------------------

a:
name lin
age 21

b:
name xue
age 20

4.容易出的小错误:

①访问顺序:

可以用dict_name[key]  /  dict_name.get(key)访问字典的值,也可以用列表索引list_name[索引]访问列表的值。但是要注意哪个在外,哪个在内,先访问外层,再访问内层,直接访问内层的会出错。

②字典的值为列表,访问的结果是输出整个列表

需要嵌套循环遍历里面的键值对。

③字典中不能全部由字典元素组成

Python中,列表字典都是非常常用的数据结构,它们可以相互嵌套,形成更复杂的数据结构,以便于存储操作数据。 **1. 列表嵌套列表(List of Lists):** 这是一种简单的嵌套形式,其中一个列表中的元素可以是另一个列表。例如: ```python nested_list = [[1, 2, 3], ['a', 'b', 'c'], [True, False]] ``` 在这个例子中,`nested_list`是一个包含三个子列表列表,每个子列表内部都有不同类型的元素。 **2. 字典嵌套列表(Dictionary of Lists或Lists of Dictionaries):** 在字典中,你可以将列表作为值,使得每个键关联一个列表。比如: ```python dict_nested_list = {'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35]} ``` 这里,`dict_nested_list`有两个键值对,分别是'name'对应的人员姓名列表,'age'对应的年龄列表。 **3. 字典嵌套字典(Dictionary of Dictionaries):** 这种嵌套更深层次,字典的值也可以是字典。如: ```python nested_dict = {'person1': {'first_name': 'John', 'last_name': 'Doe'}, 'person2': {'first_name': 'Jane', 'last_name': 'Smith'}} ``` 在此例中,每个键如'person1'对应的是一个包含了'first_name''last_name'两个字段的小字典嵌套可以帮助我们组织复杂的结构化数据,但同时也增加了理解处理的难度。在操作这些嵌套结构时,通常需要用到循环、条件判断等高级技巧。如果你在实际应用中遇到这类问题,可能需要提问相关的具体场景或问题了。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值