जांचें कि क्या मान पहले से ही शब्दकोशों की सूची में मौजूद है?


122

मुझे शब्दकोशों की एक पायथन सूची मिली है, जो इस प्रकार है:

a = [
    {'main_color': 'red', 'second_color':'blue'},
    {'main_color': 'yellow', 'second_color':'green'},
    {'main_color': 'yellow', 'second_color':'blue'},
]

मैं जाँचना चाहता हूँ कि क्या कोई विशेष कुंजी / मान वाला कोई शब्द पहले से ही सूची में मौजूद है, जो निम्नानुसार है:

// is a dict with 'main_color'='red' in the list already?
// if not: add item

जवाबों:


268

यहाँ यह करने का एक तरीका है:

if not any(d['main_color'] == 'red' for d in a):
    # does not exist

कोष्ठक में हिस्सा एक जनरेटर अभिव्यक्ति है जो Trueप्रत्येक शब्दकोश के लिए लौटता है जिसमें महत्वपूर्ण मूल्य जोड़ी है जिसे आप ढूंढ रहे हैं, अन्यथा False


यदि कुंजी भी गायब हो सकती है तो उपरोक्त कोड आपको दे सकता है KeyError। आप getडिफ़ॉल्ट मान का उपयोग करके और इसे ठीक कर सकते हैं । यदि आप डिफ़ॉल्ट मान प्रदान नहीं करते हैं , Noneतो लौटा दिया जाता है।

if not any(d.get('main_color', default_value) == 'red' for d in a):
    # does not exist

कमाल का वन-लाइनर सिंटैक्स, मुझे इसके लिए बहुत मुश्किल लग रहा है! मुझे इस बात की उत्सुकता है कि पायथन डॉक्स में हमें कहाँ दिखाया गया है कि हम वास्तव में 'फॉर' से पहले 'के लिए' का ऑपरेशन लगा सकते हैं?
sylye

1
मैंने इसे पाया, इसे लिस्ट कॉम्प्रिहेंशन docs.python.org/2/whatsnew/2.0.html?highlight=comprehensions
sylye

2
वहाँ अगर परीक्षण करने के लिए एक संभावना है 'main_color': 'red'और 'second_color':'blue'अस्तित्व?
फ्लोरेंट

1
क्या कोई तरीका है, एक बार अभिव्यक्ति के सही या गलत होने का मूल्यांकन करने के लिए, फिर से लूप किए बिना मूल्य पर एक क्रिया करने के लिए?
ब्रायस

जब "null" [{"main_color": null, "second_color": "red"}, {"main_color:" green "," second_color ":" null_color ":
Ashok Sri

5

शायद यह मदद करता है:

a = [{ 'main_color': 'red', 'second_color':'blue'},
     { 'main_color': 'yellow', 'second_color':'green'},
     { 'main_color': 'yellow', 'second_color':'blue'}]

def in_dictlist((key, value), my_dictlist):
    for this in my_dictlist:
        if this[key] == value:
            return this
    return {}

print in_dictlist(('main_color','red'), a)
print in_dictlist(('main_color','pink'), a)

3

शायद इन पंक्तियों के साथ एक समारोह क्या आप के बाद कर रहे हैं:

 def add_unique_to_dict_list(dict_list, key, value):
  for d in dict_list:
     if key in d:
        return d[key]

  dict_list.append({ key: value })
  return value

1

@ मर्क बायर्स के शानदार जवाब और @ फ़्लोरेंट प्रश्न के आधार पर, केवल यह इंगित करने के लिए कि यह 2 शर्तों के साथ 2 से अधिक कुंजियों के साथ भी काम करेगा:

names = []
names.append({'first': 'Nil', 'last': 'Elliot', 'suffix': 'III'})
names.append({'first': 'Max', 'last': 'Sam', 'suffix': 'IX'})
names.append({'first': 'Anthony', 'last': 'Mark', 'suffix': 'IX'})

if not any(d['first'] == 'Anthony' and d['last'] == 'Mark' for d in names):

    print('Not exists!')
else:
    print('Exists!')

परिणाम:

Exists!
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.