অভিধানের তালিকার মধ্যে মানটি ইতিমধ্যে বিদ্যমান কিনা তা পরীক্ষা করে দেখুন?


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
আমি এটি খুঁজে পেয়েছি, এটিকে লিস্ট কম্পিহেনশন ডকস.পিথন.আর.ইউথ্ন.ইউ
এইচটিএমএল? হাইটলাইট

2
'main_color': 'red'এবং এর 'second_color':'blue'অস্তিত্ব থাকলে পরীক্ষা করার কোন সম্ভাবনা আছে?
ফ্লোরেন্ট

1
আবার কোনও লুপ না করে মানটির উপর কোন ক্রিয়া সম্পাদনের জন্য একবার অভিব্যক্তিটি সত্য বা মিথ্যা হিসাবে মূল্যায়ন করার পরে কি কোনও উপায় আছে?
ব্রাইস

ডেটা "নাল" [{"প্রধান_ রঙ": নাল, "দ্বিতীয়_রঙ": "লাল"}, {"প্রধান_ রঙ:" সবুজ "," দ্বিতীয়_ রঙ ":" নাল "
অশোক শ্রী

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!
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.