python 字典

字典:无序、key天生去重,查询效率高

字典方法:
1.clear() 清除字典中所有项
2.get() 访问字典键值
3.items() 将字典中的所有项以列表方式返回,列表中的每一项都表示为(键,值)
4.pop() 获取指定键的值,然后将这个键值对从字典中删除
5.update() 利用一个字典项更新另外一个字典
6.values() 返回字典中的值
7.setdefault 与get方法类似,能在不包含给定键时设定默认值。

定义字典

city = {'北京': {'东城': {'东单': '东方新天地'}}}

查询字典

print(city['北京'])
{'东城': {'东单': '东方新天地'}}

print(city['北京']['东城'])
{'东单': '东方新天地'}

print(city['北京']['东城']['东单'])
东方新天地

查询不存在的key

print(city['上海'])
Traceback (most recent call last):
  File "<input>", line 1, in <module>
KeyError: '上海'

 key不存在时,显示0:表示没有这个键,默认返回None

get()
print(city.get('上海',0))
0

setdefault()
print(city.setdefault('上海','0'))
0

添加字典键值

添加北京东城王府井百货大楼
city['北京']['东城']['王府井'] = '百货大楼'
city
{'北京': {'东城': {'东单': '东方新天地', '王府井': '百货大楼'}}}

添加北京西城平安大街南锣鼓巷
city['北京']['西城']= {'平安大街':'南锣鼓巷'}
city
{'北京': {'西城': {'平安大街': '南锣鼓巷'}, '东城': {'东单': '东方新天地', '王府井': '百货大楼'}}}

pop,删除字典键值

删除北京东城东单东方新天地
city = {'北京': {'西城': {'平安大街': '南锣鼓巷'}, '东城': {'东单': '东方新天地', '王府井': '百货大楼'}}}
print(city['北京']['东城'].pop('东单'))
东方新天地
print(city)
{'北京': {'东城': {'王府井': '百货大楼'}, '西城': {'平安大街': '南锣鼓巷'}}}

popitem,随机删除一个键值

city = {'北京': {'西城': {'平安大街': '南锣鼓巷'}, '东城': {'王府井': '百货大楼', '东单': '东方新天地'}}}
city['北京']['东城'].popitem()
print(city)
{'北京': {'东城': {'东单': '东方新天地'}, '西城': {'平安大街': '南锣鼓巷'}}}

del 指定key进行删除

city = {'北京': {'西城': {'平安大街': '南锣鼓巷'}, '东城': {'东单': '东方新天地', '王府井': '百货大楼'}}}
del city['北京']['西城']
print(city)
{'北京': {'东城': {'东单': '东方新天地', '王府井': '百货大楼'}}}

修改字典键值

直接修改

city['北京']['东城']['东单'] = '东方广场'
city
{'北京': {'西城': {'平安大街': '南锣鼓巷'}, '东城': {'王府井': '百货大楼', '东单': '东方广场'}}}

update,利用一个字典项更新另外一个字典,相当于合并字典。

c1 = {}
c1['东单'] = '东方新天地'
city['北京']['东城'].update(c1)
city
{'北京': {'西城': {'平安大街': '南锣鼓巷'}, '东城': {'王府井': '百货大楼', '东单': '东方新天地'}}}

查看字典的键

for i in city.keys():
    print(i)
    
北京

查看字典的值

for i in city.values():
    print(i)
    
{'西城': {'平安大街': '南锣鼓巷'}, '东城': {'王府井': '百货大楼', '东单': '东方广场'}}

迭代字典,第一种效率高于第二种

第一种

for i in city:
    print(i,'\n','\t',city[i])
    
北京 
      {'西城': {'平安大街': '南锣鼓巷'}, '东城': {'王府井': '百货大楼', '东单': '东方广场'}}

第二种

for i, j in city.items():
    print(i, '\n\t', j)

北京 
     {'西城': {'平安大街': '南锣鼓巷'}, '东城': {'王府井': '百货大楼', '东单': '东方广场'}}

 fromkeys: 把列表每个值取出来当成key,并指定value.

定义列表
city = ['北京', '上海', '深圳']

生成字典,键值为0
city_1 = dict.fromkeys(city, 0)

print(city_1)
{'北京': 0, '上海': 0, '深圳': 0}


查看字典键值
print(city_1['北京'])
0
print(city_1['上海'])
0
print(city_1['深圳'])
0

查看字典三个key的内存地址,此时三个key在内存中的地址一样。
print(id(city_1['北京']))
4311538624
print(id(city_1['上海']))
4311538624
print(id(city_1['深圳']))
4311538624


修改键值
city_1['北京'] = '010'
city_1['上海'] = '021'
city_1['深圳'] = '022'

查看键值,不用的key对应不同的value
print(city_1['北京'])
010
print(city_1['上海'])
021
print(city_1['深圳'])
022

查看键值修改后的内存地址,此时三个key的内存地址已经不一样。
print(id(city_1['北京']))
4324269560
print(id(city_1['上海']))
4324413032
print(id(city_1['深圳']))
4324412808

同样的方法,不同的是键值指定为一个列表

city = ['北京', '上海', '深圳']
city
['北京', '上海', '深圳']


city_1 = dict.fromkeys(city,[1,2,3])
city_1
{'北京': [1, 2, 3], '上海': [1, 2, 3], '深圳': [1, 2, 3]}

查看键值,发现上海和深圳的value也跟同北京一起被修改了。
city_1['北京'][0] = '010'
print(city_1['北京'])
['010', 2, 3]
print(city_1['上海'])
['010', 2, 3]
print(city_1['深圳'])
['010', 2, 3]

查看内存地址,发现北京、上海、深圳的内存地址是一样的。
print(id(city_1['北京']))
4324526472
print(id(city_1['上海']))
4324526472
print(id(city_1['深圳']))
4324526472


总结:修改列表中的元素不会改变列表本身的内存地址,也就是对于key(北京、上海、深圳)对应的内存地址依然相同。

字符串-列表-字典之间转换

# 字符串转成列表
c = '北京,上海,深圳'

c_list = c.split(',')

print(c_list)

# 列表转成字符串
print(','.join(c_list))


# 列表转成字典
print(dict.fromkeys(c_list, 1))


# 字符串转成字典
n = '1, 2, 3'
print(dict(zip(c.split(','), n.split(','))))


# 字典到列表
d = {'北京': '1', '上海': ' 2', '深圳': ' 3'}

res_k = []
d_key = d.keys()
for i in d_key:
    res_k.append(i)
print(res_k)

res_v = []
d_v = d.values()
for i in d_v:
    res_v.append(i)
print(res_v)

 

posted on 2017-01-20 16:37  就是稳稳地  阅读(163)  评论(0编辑  收藏  举报