مرتب سازی دیکشنری های موجود در یک فایل

حل شده 

Python

توسط mr-alidoosti در 1 سال پیش
2 176.8k 5 1 سال پیش
mr-alidoosti reza-irdev
1

سلام فرض کنید یک فایل داریم که در هر خط یک دیکشنری وجود داره که البته خود این دیکشنری ها تو در تو هستن.یعنی داخل هر دیکشنری چند دیکشنری دیگه وجود داره حالا من میخوام این دیکشنری ها بر اساس کلیدی که من میخوام سورت بشن و به کاربر نمایش داده بشن هر راهی بود رفتم.به نتیجه نرسیدمشما بگید چی کار کنم؟

فرمت فایلی که میخوام سورت بشه به این شکله :

{
    'data': {
        'id': 1,
        'name': '1',
        'family': '1',
        'field': '1',
        'year': '1'
    },
    'lesson': {
        'les11': {
            'code': '11',
            'score': '1',
            'semester': '1',
            'teacher': '1'
        },
        'les12': {
            'code': '12',
            'score': '22',
            'semester': '22',
            'teacher': '22'
        },
        'les13': {
            'code': '13',
            'score': '33',
            'semester': '33',
            'teacher': '33'
        }
    }
} {
    'data': {
        'id': 3,
        'name': '3',
        'family': '3',
        'field': '3',
        'year': '3'
    },
    'lesson': {
        'les12': {
            'code': '12',
            'score': '3',
            'semester': '3',
            'teacher': '3'
        },
        'les22': {
            'code': '22',
            'score': '33',
            'semester': '33',
            'teacher': '33'
        },
        'les23': {
            'code': '23',
            'score': '33',
            'semester': '33',
            'teacher': '33'
        }
    }
} {
    'data': {
        'id': 2,
        'name': '2',
        'family': '2',
        'field': '2',
        'year': '2'
    },
    'lesson': {
        'les13': {
            'code': '13',
            'score': '2',
            'semester': '2',
            'teacher': '2'
        },
        'les32': {
            'code': '32',
            'score': '22',
            'semester': '22',
            'teacher': '22'
        },
        'les33': {
            'code': '33',
            'score': '33',
            'semester': '33',
            'teacher': '33'
        }
    }
}
آخرین ویرایش: 26-12-2017 ساعت 12:16، توسط Reza دلیل: برای خوانا کردن دیکشنری: https://www.cleancss.com/python-beautify/

پاسخ ها

1

سلام. خوش اومدین. چند تا مثال: چیدمان بر اساس key

mydict = {'carl':40,
          'alan':2,
          'bob':1,
          'danny':3}

for key in sorted(mydict.iterkeys()):
    print "%s: %s" % (key, mydict[key])
alan: 2
bob: 1
carl: 40
danny: 3

چیدمان بر اساس مقدار:

for key, value in sorted(mydict.iteritems(), key=lambda (k,v): (v,k)):
    print "%s: %s" % (key, value)
bob: 1
alan: 2
danny: 3
carl: 40

راه دیگش استفاده از OrderedDict هست. http://blog.modp.com/2007/11/sorting-python-dict-by-value.html http://docs.python.org/lib/typesseq-mutable.html#typesseq-mutable https://docs.python.org/3/library/collections.html#collections.OrderedDict

آخرین ویرایش: 26-12-2017 ساعت 12:53، توسط Reza
0

> سلام. خوش اومدین. چند تا مثال: **چیدمان بر اساس key** ``` mydict = {'carl':40,          'alan':2,          'bob':1,          'danny':3} for key in sorted(mydict.iterkeys()):    print "%s: %s" % (key, mydict[key]) ``` ``` alan: 2 bob: 1 carl: 40 danny: 3 ``` **چیدمان بر اساس مقدار:** ``` for key, value in sorted(mydict.iteritems(), key=lambda (k,v): (v,k)):    print "%s: %s" % (key, value) ``` ``` bob: 1 alan: 2 danny: 3 carl: 40 ``` راه دیگش استفاده از OrderedDict هست. http://blog.modp.com/2007/11/sorting-python-dict-by-value.html http://docs.python.org/lib/typesseq-mutable.html#typesseq-mutable https://docs.python.org/3/library/collections.html#collections.OrderedDict

ممنون بخاطر جوابتون اما این روش ها فقط خط اول رو سورت میکنن من میخوام کل فایل سورت بشه

1

خواهش میکنم. شما بفرمائید بر چه اساسی میخواین مرتب کنید؟ این رو نگفتید

0

> خواهش میکنم. شما بفرمائید بر چه اساسی میخواین مرتب کنید؟ این رو نگفتید

این فایل به عنوان دیتابیس استفاده میشه میخوام کاربر بتونه این فایل رو بر اساس کلید های نام یا سال یا رشته، مرتب کنه یعنی یکی از گزینه هارو انتخاب میکنه،بعد دیکشنری ها بر اون اساس براش سورت و چاپ میشن

0

> این فایل به عنوان دیتابیس استفاده میشه میخوام کاربر بتونه این فایل رو بر اساس کلید های نام یا سال یا رشته، مرتب کنه یعنی یکی از گزینه هارو انتخاب میکنه،بعد دیکشنری ها بر اون اساس براش سورت و چاپ میشن
خوب من پیشنهاد میکنم اگر قراره حجم این فایل بیشتر و پیچیده تر بشه حتما از یه سیستم مدیریت دیتابیس مثل PostgreSQL استفاده کنید اینطوری بای شما خیلی راحت تره که بتونید دادهها رو بازخوانی کنید. ___ با روش فعلی برای مرتب سازی level های بعدی میتونید از حلقه ها استفاده کنید

خوش آمدید

برای طرح سوال، ایجاد بحث و فعالیت در سایت نیاز است ابتدا وارد حساب کاربری خود شوید. در صورتی که هنوز عضو سایت نیستید میتوانید در عرض تنها چند ثانیه ثبت نام کنید.

لطفا ابتدا لاگین کنید