كيف يمكنني جعل مفتاح "الصورة" الأول؟

labels = app.config["LABELS"]

then print(labels)

   [{'name': '', 'image': '34-4.png', 'xMax': '2287', 'xMin': '2102', 'yMin': '53', 'id': '1', 'yMax': '110'},
    {'name': '', 'image': '34-4.png', 'xMax': '2414', 'xMin': '2299', 'yMin': '80', 'id': '2', 'yMax': '118'},
    {'name': '', 'image': '34-4.png', 'xMax': '2193', 'xMin': '2138', 'yMin': '128', 'id': '3', 'yMax': '140'}]

القائمة الفعلية أكبر حجمًا ، كيف يمكنني طلب هذه القيم بحيث يبدأ القاموس بالصورة بدلاً من الاسم ، ولسبب ما يبدأ دائمًا بالاسم ، لقد تحقق من الإجابات السابقة هنا مثل مفتاح الطلب في Python Dictionaries ، أمر dict لكنني لا أقوم بإدخالها بهذه الطريقة ، لدي بالفعل لهم وتريد تغيير هم (ترتيبهم)

0
لن يكون لها أي تأثير أكيد في مراحل المعالجة اللاحقة ولكني أريد فقط رؤية الصورة image أولاً بهذه البساطة.
وأضاف المؤلف user9686018, مصدر
لا أنا لا أريد فقط الصورة الأولى.
وأضاف المؤلف user9686018, مصدر
في محاولة لا يزال.
وأضاف المؤلف user9686018, مصدر
لماذا تحتاج ذلك؟ لـ json التسلسل؟
وأضاف المؤلف Jean-François Fabre, مصدر
هل يهمك ما يحدث لترتيب المفاتيح الأخرى في كل قاموس فرعي؟
وأضاف المؤلف PM 2Ring, مصدر
حسنا. هل تفهم كيفية استخدام حل FHTMitchell؟
وأضاف المؤلف PM 2Ring, مصدر
ممكن أن تتكرر النشر
وأضاف المؤلف R. García, مصدر
ما هى محاولاتك حتى هذه اللحظة؟
وأضاف المؤلف Yazan Jaber, مصدر

1 إجابة

لا يتم ترتيب القواميس (إلا إذا كنت تقوم بتشغيل الإصدار بيتا من بيثون 3.7). ليس لديهم أي مفهوم للنظام ، ويمكنهم تقديم قيم بأي ترتيب قد يتغير اعتمادًا على التنفيذ مع كل تكرار.

يجب عليك إما استخدام قائمة من 2-tuples أو OrderedDict. من أجل تغيير dict إلى dict أمر ، استخدم

od = collections.OrderedDict(sorted(labels[index].items(), key=f))

حيث f هي دالة تأخذ واحدة (مفتاح ، قيمة) وسيطة tuple تحدد كيفية رغبتك في الفرز. إذا كان كل ما تريده هو مفتاح 'image' ليكون أولًا ، استخدمه

f = lambda t: t [0]! = 'image'

والتي ستُرجع False (aka 0 ) image و True (aka 1 ) لكل مفتاح آخر.

تصحيح:

لذلك ، باستخدام العلامات كما هو موضح أعلاه ، قم بما يلي:

for index, label in enumerate(labels):
    labels[index] = collections.OrderedDict(
              sorted(label.items(), key=lambda t: t[0] != 'image'))

المخرجات العلامات :

[OrderedDict([('image', '34-4.png'),
              ('name', ''),
              ('xMax', '2287'),
              ('xMin', '2102'),
              ('yMin', '53'),
              ('id', '1'),
              ('yMax', '110')]),
 OrderedDict([('image', '34-4.png'),
              ('name', ''),
              ('xMax', '2414'),
              ('xMin', '2299'),
              ('yMin', '80'),
              ('id', '2'),
              ('yMax', '118')]),
 OrderedDict([('image', '34-4.png'),
              ('name', ''),
              ('xMax', '2193'),
              ('xMin', '2138'),
              ('yMin', '128'),
              ('id', '3'),
              ('yMax', '140')])]
0
وأضاف
أنا استوردت مجموعات ، ما ينبغي لي استبدال index with tho
وأضاف المؤلف user9686018, مصدر
صحيح لدي نفس الإخراج ولكن ما كنت أفكر فيه هو الاحتفاظ بها كقوائم من القواميس مثلما أظهر مثالاً في سؤالي ، دون إضافة الأمر في الإخراج أو جعلها شكل tuples ،.
وأضاف المؤلف user9686018, مصدر
@ PM2Ring أعرف :) ، لكنني لا أريد أن أخلط الأمر أبعد من ذلك.
وأضاف المؤلف FHTMitchell, مصدر
@ user9686018 فهرس labels ...... So 0 ، 1 ، 2 ، ... إلخ لكل واحد بدوره. انظر تعديلي
وأضاف المؤلف FHTMitchell, مصدر
أي إصدار من python أنت على؟ import sys؛ print sys.version إذا لم يكن أكبر من 3.6.0 فإن الجواب لا يمكنك ذلك. ما هو الخطأ في OrderedDict على أي حال؟ إنها فئة فرعية من dict وستفعل كل ما تفعله dict .
وأضاف المؤلف FHTMitchell, مصدر
FWIW ، يحتفظ dict النظام الإدراج في Python 3.6.0 + (لم يكن في 3.6 بيتا).
وأضاف المؤلف PM 2Ring, مصدر