【发布时间】:2021-02-14 13:26:36
【问题描述】:
在第一个 for 循环之后,我的字典缩小了,在 for 循环结束时我只剩下一个键值对,如结果所示。最后以某种方式给出了字符串错误。任何人都可以提出我对字典不了解的地方吗?
states = {
'Bagmati' : 'BG',
'Gandaki' : 'GD',
'Karnali' : 'KL',
'Janakpur' : "JK",
'Mechi' : 'MC'
}
cities = {
'BG' : 'Kathmandu',
"GD" : "Pokhara",
"KL" : "Jumla",
"MC" : 'Jhapa'
}
cities['BG'] = 'Hetauda'
cities['MC'] = 'Taplejung'
cities['BG'] = 'Ramechap'
cities['JK'] = 'Dhanusha'
print(f'1. {states}')
for states, abbrev in list(states.items()):
print(f'the {states} is abbreviated as {abbrev}')
print(states)
print(cities)
#print every city and states
for abbrev, cities in list(cities.items()):
print(f'the {abbrev} state has {cities} city')
print(f'2. {states}')
print(f'3. {cities}')
# now lets access both the states and cities dictionaries
for states, abbrev in list(state`enter code here`s.items()):
print(f' the {states} state is abbreviated as {abbrev}')
print(f' and has the city {cities[abbrev]}')
结果:
C:\Users\Prabin\Desktop\Desktop\personal-projects\mystuff\39. Dictionaries>python new12.py
1. {'Bagmati': 'BG', 'Gandaki': 'GD', 'Karnali': 'KL', 'Janakpur': 'JK', 'Mechi': 'MC'}
the Bagmati is abbreviated as BG
the Gandaki is abbreviated as GD
the Karnali is abbreviated as KL
the Janakpur is abbreviated as JK
the Mechi is abbreviated as MC
Mechi
{'BG': 'Ramechap', 'GD': 'Pokhara', 'KL': 'Jumla', 'MC': 'Taplejung', 'JK': 'Dhanusha'}
the BG state has Ramechap city
the GD state has Pokhara city
the KL state has Jumla city
the MC state has Taplejung city
the JK state has Dhanusha city
2. Mechi
3. Dhanusha
Traceback (most recent call last):
File "new12.py", line 36, in <module>
for states, abbrev in list(states.items()):
AttributeError: 'str' object has no attribute 'items'
【问题讨论】:
-
因为您正在重新使用变量
states:for states, abbrev in list(states.items()):,所以您的字典会被字符串替换。注意,不要使用list(states.items()),你可以使用states.items()。for abbrev, cities in list(cities.items())也一样 -
什么是
state'enter code here's.items? -
基本上:选择与块变量名称不冲突的循环变量名称。 Python 变量作用于函数作用域,而不是块作用域,因此它会覆盖循环外块中的字典。 minimal reproducible example 将是:
a = 42; for a in range(1): pass; print(a)=>0。
标签: python dictionary