簡體   English   中英

有沒有辦法查看字符串是否與字典鍵匹配以及是否打印其值? Python

[英]Is there a way to see if a string matches a dictionary key and if it is print its value? python

我有一本字典:

name = {'San Francisco':'California', 'Boise':'Idaho',
        'Kansas City': 'Missouri', 'Miami':'Florida'}

如果發生這種情況,我正在使用正則表達式去除城市名稱(如下)末尾的任何數字。 我想要的是讓我們說“Kansas City1”被剝離“1”,然后從那里將剝離的字符串與字典中的鍵進行比較,一旦有匹配項,我希望它返回連接到匹配的密鑰。

這是我當前的代碼:

def abbrev(string):
   strip_string = re.sub(r'\d+', '', string)

   if(strip_string in name.keys()):
      initial = [value for value in name.values()][strip_string in name.keys()]
      return initial
   else:
      initial = string[:3]
      return initial

string = ("Kansas City1")
initial = abbrev(string) 
print(initial)

所以如果堪薩斯城 1 應該給密蘇里州,但代碼出於某種原因給了我愛達荷州..我不知道為什么。 有人可以幫我解決這個問題嗎?

這是您的代碼的固定和清理版本:

import re


def abbrev(string, names):
    strip_string = re.sub(r'\d', '', string)
    if strip_string in names:
        initial = names[strip_string]
    else:
        # Not sure what's the point of this?
        initial = string[:3]
    return initial


names = {'San Francisco': 'California',
         'Boise': 'Idaho',
         'Kansas City': 'Missouri',
         'Miami': 'Florida'}

string = "Kansas City1"
initial = abbrev(string, names) 
print(initial)

輸出:

 Missouri

你的原文:

if(strip_string in name.keys()):
    initial = [value for value in name.values()][strip_string in name.keys()]

真的沒有多大意義。 首先,您在 if 塊中進行了一些合理的檢查,但隨后您不僅會訪問元素,還會分配initial = List[str][bool]

問題出在您的 dict 參考中:

  initial = [value for value in name.values()][strip_string in name.keys()]

你的第一個術語是一個新建的列表:

[value for value in name.values()]

您的索引值是一個布爾值:

                  [strip_string in name.keys()]

讓我們用一些簡單的跟蹤代碼來看看這個,打印每個術語:

if(strip_string in name.keys()):
    print ([value for value in name.values()])
    print ([strip_string in name.keys()])
    initial = [value for value in name.values()][strip_string in name.keys()]
    return initial

輸出:

['Idaho', 'California', 'Florida', 'Missouri']
[True]
California

您的代碼非常清楚地說明要從 dict 值構建一個列表,然后從該列表中報告元素[1] 你已經做了很多工作來確保你得到的東西不一定與你的輸入相關。 請注意,這將為字典中的任何鍵返回相同的值。

相反,你知道關鍵:直接使用它,因為其他人已經包含在他們的答案中。

initial = name[strip_string]

只需執行initial = name[strip_string]而不是[value for value in name.values()][strip_string in name.keys()]

你已經知道strip_string是一個有效的key,為什么不直接用它來獲取你想要的值呢?

import re

def abbrev(string):
    name = {'San Francisco': 'California', 'Boise': 'Idaho', 'Kansas City': 'Missouri', 'Miami': 'Florida'}

    #Remove the trailing digits from the string
    strip_string = re.sub(r'\d+', '', string)

    #If the key is present in the name, get the value
    if strip_string in name:
        initial =  name[strip_string]
    #Else get the first 3 characters of the input string
    else:
        initial = string[:3]

    return initial

string = ("Kansas City1")
initial = abbrev(string)
print(initial)

輸出將是Missouri

由於以下原因,您的原始代碼無法正常工作

您的行print([value for value in name.values()])的第一部分為您提供['California', 'Idaho', 'Missouri', 'Florida']和您語句的第二部分[strip_string in name.keys()]給你[True]

print([value for value in name.values()])
#['California', 'Idaho', 'Missouri', 'Florida']
print([strip_string in name.keys()])
#[True]

現在[True]實際上評估為 1 因為int(True)=1 ,因此
['California', 'Idaho', 'Missouri', 'Florida'][1]給你Idaho ,因為列表的第二個元素是Idaho

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM