تحويل مفاتيح القاموس إلى أسماء المتغيرات مع نفس القيم في بيثون من .مات ماتلاب الملفات باستخدام <url>

StackOverflow https://stackoverflow.com/questions/6369535

سؤال

أحاول أن تأخذ درجة الحرارة القاموس الأساسي = {'مفتاح': مجموعة ([1 ، 2])} تحميلها من .ملف حصيرة مع سكيبي.أدر المفاتيح في ملف قاموس بايثون الذي تم إرجاعه بواسطة لوادمات () إلى أسماء متغيرة بقيم مماثلة للمفاتيح التمثيلية.

هكذا على سبيل المثال:

temp = {'key':array([1,2])}

تحولت إلى

key = array([1,2])

أنا أعرف كيفية الاستيلاء على مفاتيح مع درجة الحرارة.مفاتيح ().ثم الاستيلاء على العناصر أمر سهل ولكن كيف يمكنني فرض قائمة السلاسل في درجة الحرارة.مفاتيح () لتكون أسماء المتغيرات بدلا من السلاسل.

آمل أن يكون هذا منطقيا ولكن ربما يكون هذا سهلا حقا لا يمكنني التفكير في كيفية القيام بذلك.

في صحتك

هل كانت مفيدة؟

المحلول

في لغة python ، يمكن تمرير معلمات الطريقة كقواميس باستخدام سحر كود الترقيم العام: Genacodicetagpre

نصائح أخرى

أفضل شيء نفعله هو استخدام temp['key'].للإجابة على السؤال ، ومع ذلك ، يمكنك استخدام exec وظيفة.فوائد القيام بذلك بهذه الطريقة هو أنه يمكنك القيام بذلك لم يكن لديك إلى رمز الثابت أي أسماء المتغيرات أو تقتصر نفسك للعمل داخل وظيفة.

from numpy import array,matrix

temp = {'key':array([1,2]),'b': 4.3,'c': 'foo','d':matrix([2,2])}

for k in temp:
    exec('{KEY} = {VALUE}'.format(KEY = k, VALUE = repr(temp[k])))

>>> key
array([1, 2])
>>> b
4.3
>>> c
'foo'
>>> d
matrix([[2, 2]])

ملاحظة : لن يعمل هذا إلا إذا قمت باستيراد الوظيفة المحددة من الوحدات النمطية.إذا كنت لا ترغب في القيام بذلك بسبب ممارسة التعليمات البرمجية أو الحجم الهائل للوظيفة التي قد تحتاج إلى استيرادها ، يمكنك كتابة وظيفة لتسلسل اسم الوحدة النمطية أمام الإدخال.الإخراج هو نفس المثال السابق.

import numpy as np,numpy

temp = {'key':np.array([1,2]),'b': 4.3,'c': 'foo','d':np.matrix([2,2])}

def exec_str(key,mydict):
    s = str(type(mydict[key]))
    if '.' in s:
        start = s.index("'") + 1
        end = s.index(".") + 1
        v = s[start:end:] + repr(mydict[key])
    else:
        v = repr(mydict[key])     
    return v

for k in temp:
    exec('{KEY} = {VALUE}'.format(KEY = k, VALUE = exec_str(k,temp)))

في حين أن هذه ليست أفضل ممارسة رمز ، فإنه يعمل بشكل جيد لجميع الأمثلة اختبرت.

قد تكون أفضل طريقة هي حشو البيانات في كائن منفصل: Genacodicetagpre

هذا سهل الاستخدام بشكل تفاعلي ولا يتطلب أي سحر. يجب أن يكون هذا مناسبًا لمستخدمي Matlab أيضًا.

تعديل : تبين أن الأشياء أدناه لا تعمل في الواقع في معظم الأوقات.سيء جدا ، الكثير للسحر.

إذا كنت تريد أن تتدخل في السحر ، فيمكنك فعل شيء مثل Genacodicetagpre

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

ومع ذلك ، لن يعمل هذا في الوظائف: Genacodicetagpre

النقطة المهمة هي أن الكود العام أعلاه مرتبط بالمتغير الشامل في وقت الترجمة ، وبالتالي لا تحاول بايثون البحث عنه بين المتغيرات المحلية.

بينما أوصي فقط باستخدام القاموس مباشرةً والوصول إلى المصفوفات مثل رمز العلامة العامة ، إذا كنت تعرف جميع أسماء المتغيرات مسبقًا ، يمكنك كتابة دالة لاستخراجها إلى متغيرات فردية: Genacodicetagpre

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top