تقنية

ChainMap في بايثون: هل ترتيب المفاتيح يحدد أولوية القيم؟

ChainMap(first,second): ترتيب y,z,x.
اجتياز: y,z,x.

ChainMap تبحث عن القيمة من الخريطة الأولى؛ ترتيب اجتياز المفاتيح يمسح الخرائط من الأخيرة إلى الأولى. [1]

الخلاصة السريعة

لا؛ ترتيب الاجتياز وأولوية العثور على القيمة قاعدتان مختلفتان. [1]

  • ChainMap تبحث عن القيمة من الخريطة الأولى؛ ترتيب اجتياز المفاتيح يمسح الخرائط من الأخيرة إلى الأولى. [1]
  • تتوقف القراءة عند أول خريطة تحتوي المفتاح؛ لا تختار القيمة بحسب موضع المفتاح في الاجتياز. [1]
  • على CPython 3.12.14، first={"x":1,"y":2} وsecond={"y":8,"z":9} تعطيان مفاتيح y,z,x في ChainMap(first,second). [1]
  • رغم بدء الاجتياز بـy من ترتيب second، chain["y"] تعيد 2 من first؛ items تعطي الأزواج y:2 ثم z:9 ثم x:1. [1]
  • تحكم: ChainMap(second,first) تعطي مفاتيح x,y,z وقيمة y تساوي 8؛ القاموسان لم يتغيرا. [1]

اتجاها الاجتياز والبحث

ChainMap تبحث عن القيمة من الخريطة الأولى؛ ترتيب اجتياز المفاتيح يمسح الخرائط من الأخيرة إلى الأولى. [1]

اختيار القيمة

تتوقف القراءة عند أول خريطة تحتوي المفتاح؛ لا تختار القيمة بحسب موضع المفتاح في الاجتياز. [1]

مفتاح في قاموسين

على CPython 3.12.14، first={"x":1,"y":2} وsecond={"y":8,"z":9} تعطيان مفاتيح y,z,x في ChainMap(first,second). [1]

from collections import ChainMap first={"x":1,"y":2};second={"y":8,"z":9} chain=ChainMap(first,second) print(list(chain)) print(list(chain.items())) [1]

القيمة y تساوي 2 من first، رغم ترتيب second.
قيمة: y=2.

الأزواج والتحكم

رغم بدء الاجتياز بـy من ترتيب second، chain["y"] تعيد 2 من first؛ items تعطي الأزواج y:2 ثم z:9 ثم x:1. [1]

control=ChainMap(second,first) print(list(control),control["y"]) [1]

تحكم: ChainMap(second,first) تعطي مفاتيح x,y,z وقيمة y تساوي 8؛ القاموسان لم يتغيرا. [1]

المراجع

  1. Python ChainMap

للتوسع: لغات البرمجة.

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.