簡體   English   中英

在python中使用字典中的部分子值檢索主鍵

[英]Retrieve the main key by using part of the sub value in a dictionary in python

我有一個包含子鍵和子值的字典。 我想打印包含子鍵中某個值的主鍵的列表。 我希望這個例子能說清楚:

cssStyleDict= {'.c13':{'color':'#000',
               'font-family':'"Arial"',
               'font-weight':'700',
               'vertical-align':'baseline'},
               '.c6':{'font-weight':'700'}, 
               '.c7':{'color':'#000',
               'font-size':'11pt',
               'font-weight':'700',
               'text-decoration':'none'},
               '.c2':{'background-color':'#ff0'}}

我想打印包含{'font-weight':'700'}的所有鍵的列表。 我試過這個:

def getKeysByValue(dictOfElements, valueToFind):
    listOfKeys = list()
    listOfItems = dictOfElements.items()
    for item  in listOfItems:
        if item[1] == valueToFind:
            listOfKeys.append(item[0])
    return  listOfKeys

listOfKeys = getKeysByValue(cssStyleDict, {'font-weight':'700'} )
for key in listOfKeys:
    print(key)

但當然這只能給我一個精確的匹配。 我也試過使用正則表達式,但無濟於事。 輸出應該是一個包含.c13 .c6 .c7的列表

如果有人可以提供幫助,請提前致謝。

你可以試試這個方法:

>>> [ i for i in cssStyleDict if cssStyleDict[i].get('font-weight') == '700' ]
['.c13', '.c6', '.c7']

要使用您發布的代碼作為答案的基礎,您只需更改 if 語句的條件。 目前,您正在檢查完美匹配,因為您使用了“==”

然而,Python 附帶了一個很棒的運算符,它可以完全滿足您的需求:“in”。

因此,您的新情況應該是:

        If valueToFind in item[1]:

希望這是有道理的!

使用字典內置的清潔和清晰的方法。

cssStyleDict= {'.c13':{'color':'#000',
               'font-family':'"Arial"',
               'font-weight':'700',
               'vertical-align':'baseline'},
               '.c6':{'font-weight':'700'}, 
               '.c7':{'color':'#000',
               'font-size':'11pt',
               'font-weight':'700',
               'text-decoration':'none'},
               '.c2':{'background-color':'#ff0'}}

for key, val in cssStyleDict.items():
  if(cssStyleDict[key].__contains__('font-weight')):
    if(cssStyleDict[key]['font-weight'] == '700'):
      print(key)

我會首先檢查該鍵的每個字典,然后將值與預期的值進行比較。

def getKeysByValue(dictOfElements, valueToFind):
    listOfKeys = list()
    listOfItems = dictOfElements.items()
    for k,v in listOfItems:
        try:
            if v[valueToFind[0]] == valueToFind[1]:
                listOfKeys.append(k)
        except KeyError:
            pass
    return  listOfKeys

listOfKeys = getKeysByValue(cssStyleDict, ('font-weight', '700') )
for key in listOfKeys:
    print(key)

暫無
暫無

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

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