Page 1 of 1

สอบถามการเรียงข้อมูลใน loop list ซ้อน list พอยัดค่าใส่ dict มันเรียงไม่ถูกค่ะ

Posted: 27/08/2017 3:28 pm
by thatsawan

Code: Select all

categ_data = [197, 152, 154, 153, 196, 151, 201, 163, 145]
item = [11,22,33]

data = {}
for cate in categ_data:
    print cate
    for i in item:
        print i
        data[cate] = i
        
        
print data

print data
ผลที่ได้

Code: Select all

{163: 33, 196: 33, 197: 33, 201: 33, 145: 33, 151: 33, 152: 33, 153: 33, 154: 33}

ลองปรับ key เป็น str เเล้วก็ไม่เรียง

Code: Select all

categ_data = [197, 152, 154, 153, 196, 151, 201, 163, 145]
item = [11,22,33]

data = {}
for cate in categ_data:
    print cate
    c = str(cate)
    for i in item:
        print i
        data[c] = i


print data


ผลที่ได้

Code: Select all

{'151': 33, '201': 33, '153': 33, '152': 33, '154': 33, '197': 33, '196': 33, '145': 33, '163': 33}
ก่อนยัดค่า ลองปริ้นค่าดูก็ทำงานถูกค่ะ key ปริ้นเรียงลำดับของ loop เเต่พอยัดค่าลงอีกตัวแปล ก็จะผิดค่ะ


ผลที่ต้องการ อยากให้ key เรียงตาม categ_data = [197, 152, 154, 153, 196, 151, 201, 163, 145]

Re: สอบถามการเรียงข้อมูลใน loop list ซ้อน list พอยัดค่าใส่ dict มันเรียงไม่ถูกค่ะ

Posted: 27/08/2017 6:55 pm
by mindphp
import โมดูล collections เข้ามาใช้ และประการตัวแปด้วย collections.OrderedDict()

Code: Select all

import collections
categ_data = [197, 152, 154, 153, 196, 151, 201, 163, 145]
item = [11,22,33]

data = collections.OrderedDict()
for cate in categ_data:
    #print cate
    #c = str(cate)
    c = cate
    data[c] = 3 # range(1,9)

print data
ผลที่ได้
OrderedDict([(197, 3), (152, 3), (154, 3), (153, 3), (196, 3), (151, 3), (201, 3), (163, 3), (145, 3)])

Re: สอบถามการเรียงข้อมูลใน loop list ซ้อน list พอยัดค่าใส่ dict มันเรียงไม่ถูกค่ะ

Posted: 27/08/2017 9:36 pm
by thatsawan
ลองมา ใส่ 2 loop ซ้อนกัน

Code: Select all

categ_data = [197, 152, 154, 153, 196, 151, 201, 163, 145]
item = [11,22,33]

data = collections.OrderedDict()
for cate in categ_data:
    for i in item:
        
        #c= str(cate)
        c = cate
        data[c] = i # range(1,9)

print data
ผลที่ได้คือ loop ของค่า item ได้ตัวสุดท้ายตลอดเลยคะ

Code: Select all

OrderedDict([(197, 33), (152, 33), (154, 33), (153, 33), (196, 33), (151, 33), (201, 33), (163, 33), (145, 33)])
จะทำยังไงให้มัน
เก็บ

{197 : {11,22,33} , 152 :{11,22,33}}
ประมานนี้เเบบนี้อ่าค่ะ

Re: สอบถามการเรียงข้อมูลใน loop list ซ้อน list พอยัดค่าใส่ dict มันเรียงไม่ถูกค่ะ

Posted: 27/08/2017 9:45 pm
by mindphp

Code: Select all

import collections
categ_data = [197, 152, 154, 153, 196, 151, 201, 163, 145]
item = [11,22,33]

data = collections.OrderedDict()
for cate in categ_data:
    #print cate
    #c = str(cate)
    c = cate
    data[c] = item

print data
ผลที่ได้
OrderedDict([(197, [11, 22, 33]), (152, [11, 22, 33]), (154, [11, 22, 33]), (153, [11, 22, 33]), (196, [11, 22, 33]), (151, [11, 22, 33]), (201, [11, 22, 33]), (163, [11, 22, 33]), (145, [11, 22, 33])])

Re: สอบถามการเรียงข้อมูลใน loop list ซ้อน list พอยัดค่าใส่ dict มันเรียงไม่ถูกค่ะ

Posted: 27/08/2017 10:16 pm
by thatsawan

Code: Select all

page_data = collections.OrderedDict()
 if parent_id not in page_data:
                        page_data[parent_id] = collections.OrderedDict()
                    page_data[parent_id][line.id] = line
ได้เเล้วค่ะ
ถ้าเรามี 2 ชั้น ต้องเรียง 2 ชั้นเลย