查找子串

时间:2019-01-30 03:48:03

标签: python

您将获得美国各州及其首都的字典。词典中的键是状态,值是大写字母。

编写代码以返回所有大写字母的列表,这些大写字母的名称中包含州名作为子字符串。

提示:例如,印第安纳州作为大写名称,印第安纳波利斯作为州名是您的代码将找到的键/值对之一。您的代码应将印第安纳波利斯添加到列表中。找到所有大写字母并将其添加到列表后,打印出列表

运行此单元格以创建州首府词典

capitals={
    'Alabama': 'Montgomery',
    'Alaska': 'Juneau',
    'Arizona':'Phoenix',
    'Arkansas':'Little Rock',
    'California': 'Sacramento',
    'Colorado':'Denver',
    'Connecticut':'Hartford',
    'Delaware':'Dover',
    'Florida': 'Tallahassee',
    'Georgia': 'Atlanta',
    'Hawaii': 'Honolulu',
    'Idaho': 'Boise',
    'Illinios': 'Springfield',
    'Indiana': 'Indianapolis',
    'Iowa': 'Des Monies',
    'Kansas': 'Topeka',
    'Kentucky': 'Frankfort',
    'Louisiana': 'Baton Rouge',
    'Maine': 'Augusta',
    'Maryland': 'Annapolis',
    'Massachusetts': 'Boston',
    'Michigan': 'Lansing',
    'Minnesota': 'St. Paul',
    'Mississippi': 'Jackson',
    'Missouri': 'Jefferson City',
    'Montana': 'Helena',
    'Nebraska': 'Lincoln',
    'Neveda': 'Carson City',
    'New Hampshire': 'Concord',
    'New Jersey': 'Trenton',
    'New Mexico': 'Santa Fe',
    'New York': 'Albany',
    'North Carolina': 'Raleigh',
    'North Dakota': 'Bismarck',
    'Ohio': 'Columbus',
    'Oklahoma': 'Oklahoma City',
    'Oregon': 'Salem',
    'Pennsylvania': 'Harrisburg',
    'Rhoda Island': 'Providence',
    'South Carolina': 'Columbia',
    'South Dakota': 'Pierre',
    'Tennessee': 'Nashville',
    'Texas': 'Austin',
    'Utah': 'Salt Lake City',
    'Vermont': 'Montpelier',
    'Virginia': 'Richmond',
    'Washington': 'Olympia',
    'West Virginia': 'Charleston',
    'Wisconsin': 'Madison',
    'Wyoming': 'Cheyenne'  
}

代码:

result = []
for x in capitals.keys():
    if(x in capitals[x]):
        result.append(capitals[x])
print(result)

6 个答案:

答案 0 :(得分:1)

哦,我明白了。我误解了你的问题。 这会起作用。

print([v for k, v in capitals.items() if k in v])

# more readable
print([capital for state, capital in capitals.items() if state in capital])

这将返回

['Indianapolis', 'Oklahoma City']

答案 1 :(得分:0)

如果要进行以下操作:

states = capitals.keys()
capitals = capitals.values()
solution = [capital for capital in capitals if [state for state in states if state in capital]]
# solution = ['Indianapolis', 'Oklahoma City']

内部列表包含出现在我们当前正在外部列表中迭代的首字母中的状态列表。如果此列表不为空,则将当前大写字母添加到输出列表中。 通过使用普通的if/for语句对相同的逻辑进行排序,可以产生相同的结果。

答案 2 :(得分:0)

  1. 使用地图查找匹配的大写字母列表。
  2. 过滤“无”条目。

输出:

filter(None, map(lambda state: capitals[state] if state in capitals[state] else None, capitals))

输出:

['Oklahoma City', 'Indianapolis']

答案 3 :(得分:0)

您可以使用列表推导来完成您当前编写的代码。这个:

result = []
for x in capitals.keys():
    if(x in capitals[x]):
        result.append(capitals[x])
print(result)
只需观察即可将

转换为列表理解。

result = [capitals[x] for x in capitals.keys() if x in capitals[x]]
print(result)

以上等同于您的代码。如果您不认识list comprehensions,建议您熟悉一下这个概念。

此代码两次调用capitals[x],因此还有一个可能的改进:迭代字典的items,这在Yuda的答案中涉及。

答案 4 :(得分:0)

对于Python 2.x:

capital_list = []
for state, capital in capitals.iteritems():
  if state.lower() in capital.lower():
    capital_list.append(capital)
print(capital_list)

对于Python 3.x:

capital_list = []
for state, capital in capitals.items():
  if state.lower() in capital.lower():
    capital_list.append(capital)
print(capital_list)

结果:

['Indianapolis', 'Oklahoma City']

答案 5 :(得分:0)

遍历字典并检查值是否包含键,即键是否为值的子字符串。

for key, value in capitals.items():
  if key in value:
    print(value)