اذهب إلى المحتوى

السؤال

نشر

لنفترض أن لدي القائمة التالية التي تحتوي على قواميس:

[
{"name": "Tom", "age": 10},
{"name": "Mark", "age": 5},
{"name": "Pam", "age": 7}
]

عندما أبحث عن اسم مثل Pam أريد أن أتمكّن أولا من إيجاد العنصر الذي يحتوي على هذا الاسم ومن ثم أريد الحصول على جميع معلوماته، فكيف أستطيع فعل ذلك في بايثون؟

Recommended Posts

  • 0
نشر

يمكنك البحث عن مفاتيح قاموس معين داخل قائمة من القواميس بطرق مختلفة، مثلا استخدم التعابير الموّلدة كما في المثال التالي:

>>> dicts = [
...     { "name": "Tom", "age": 10 },
...     { "name": "Mark", "age": 5 },
...     { "name": "Pam", "age": 7 },
...     { "name": "Dick", "age": 12 }
... ]

>>> (item for item in dicts if item["name"] == "Pam").next()
{'age': 7, 'name': 'Pam'}

لقد استخدمنا في هذا المثال حلقة التكرار for للتأكد من جميع العناصر من شرط تساوي قيمة الاسم مع الاسم الذي نبحث عنها ومن ثم يرجع لنا جميع المعلومات المتعلقة بهذا الاسم.
كما يمكنك استخدام دالة filter مع lambda للبحث داخل جميع القواميس الموجودة في القائمة كما في المثال التالي:

people = [
{'name': "Tom", 'age': 10},
{'name': "Mark", 'age': 5},
{'name': "Pam", 'age': 7}
]

filter(lambda person: person['name'] == 'Pam', people)

المصدر

  • 0
نشر

اقترح الطريقة التالية، التي ستعطيك معلومات كل الأشخاص الذين اسمهم Pam بدلاً من إعطائك أول واحد فقط:

if __name__ == '__main__':
    dicts = [
        {"name": "Tom", "age": 10},
        {"name": "Mark", "age": 5},
        {"name": "Pam", "age": 7}
    ]
 
    key = "name"
    val = "Pam"
 
    d = next((d for d in dicts if d.get(key) == val), None)
    print(d)        # {'name': 'Pam', 'age': 7}


أول من خلال الاسم فقط (بدون المفتاح):

if __name__ == '__main__':
    dicts = [
        {"name": "Tom", "age": 10},
        {"name": "Mark", "age": 5},
        {"name": "Pam", "age": 7}
    ]
    val = "Pam"
    d = next(filter(lambda person: person['name'] == val, dicts))
    print(d)        # {'name': 'Pam', 'age': 7}

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...