2016-07-05 4 views
-1

Ich habe eine Frage in Bezug auf Python-Speicherverwaltung.Speicherverwaltung für Variablen in Python

Ich habe den folgenden Code:

data1 = [ 
    {u'name': u'9_1', u'value': u'sunday'}, 
    {u'name': u'9_1', u'value': u'monday'}, 
    {u'name': u'9_1', u'value': u'wednesday'}, 
    {u'name': u'16_1', u'value': u'monday'}, 
    {u'name': u'16_1', u'value': u'tuesday'}, 
    {u'name': u'9_2', u'value': u'monday'}, 
    {u'name': u'9_2', u'value': u'tuesday'}, 
    {u'name': u'9_2', u'value': u'wednesday'}, 
    {u'name': u'16_2', u'value': u'tuesday'}, 
    {u'name': u'16_2', u'value': u'wednesday'}, 
    {u'name': u'9_3', u'value': u'wednesday'}, 
    {u'name': u'9_3', u'value': u'saturday'}, 
    {u'name': u'16_3', u'value': u'thursday'}, 
    {u'name': u'16_3', u'value': u'saturday'}, 
    {u'name': u'9_5', u'value': u'monday'}, 
    {u'name': u'9_5', u'value': u'wednesday'}, 
    {u'name': u'16_5', u'value': u'monday'}, 
    {u'name': u'16_5', u'value': u'tuesday'}, 
    {u'name': u'16_5', u'value': u'wednesday'}, 
    {u'name': u'17_5', u'value': u''}, 
    {u'name': u'18_5', u'value': u''} 
] 
multi_select_ids = ['9', '16'] 
days_of_week = dict.fromkeys(multi_select_ids,{}) 
print "before loop:", days_of_week 
for data in data1: 
    if data['value']: 
     name = data['name'].split("_") 
     if len(name) > 1: 
      ele_id = name[0] 
      row_id = name[1] 
      if ele_id in multi_select_ids: 
       temp = days_of_week[ele_id] 
       try: 
        temp[row_id] = temp[row_id] + ',' + data['value'] 
       except: 
        temp[row_id] = data['value'] 
print days_of_week 

Hier Python gleichen Speicherplatz für beide dicts verwendet,
Wie dieses Problem zu überwinden?

Ausgabe:

{ 
    '16': { 
     u'1': u'sunday,monday,wednesday,monday,tuesday', 
     u'2': u'monday,tuesday,wednesday,tuesday,wednesday', 
     u'3': u'wednesday,saturday,thursday,saturday', 
     u'5': u'monday,wednesday,monday,tuesday,wednesday' 
    }, 
    '9': { 
     u'1': u'sunday,monday,wednesday,monday,tuesday', 
     u'2': u'monday,tuesday,wednesday,tuesday,wednesday', 
     u'3': u'wednesday,saturday,thursday,saturday', 
     u'5': u'monday,wednesday,monday,tuesday,wednesday' 
    } 
} 

gewünschte Ausgabe:

{ 
    '16': { 
     u'1': u'monday,tuesday', 
     u'2': u'tuesday,wednesday', 
     u'3': u'thursday,saturday', 
     u'5': u'monday,tuesday,wednesday' 
    }, 
    '9': { 
     u'1': u'sunday,monday,wednesday', 
     u'2': u'monday,tuesday,wednesday', 
     u'3': u'wednesday,saturday', 
     u'5': u'monday,wednesday' 
    } 
} 
+3

Welche zwei Wörterbücher, und wie können Sie sagen? – DeepSpace

+0

Wäre nützlich, um tatsächliche und gewünschte Ausgabe zu haben – abimelex

+2

Ihre Frage ist wirklich nichts mit * "Speicherverwaltung" * zu tun, übrigens; Sie vergeben offensichtlich Referenzen auf das Original irgendwo, wo Sie stattdessen einen Verweis auf eine * Kopie * zuweisen sollten. – jonrsharpe

Antwort

0

Eigentlich sie unterschiedliche Werte haben. Dies ist die Ausgabe, die ich von Ihrem Code erhalten habe:

>>> print days_of_week 
{'9': {u'1': u'sunday,monday,wednesday,monday,tuesday', u'3': u'wednesday,saturday,thursday,saturday', u'2': u'monday,tuesday,wednesday,tuesday,wednesday', u'5': u'monday,wednesday,monday,tuesday,wednesday'}, '16': {u'1': u'sunday,monday,wednesday,monday,tuesday', u'3': u'wednesday,saturday,thursday,saturday', u'2': u'monday,tuesday,wednesday,tuesday,wednesday', u'5': u'monday,wednesday,monday,tuesday,wednesday'}} 
>>> print data1 
[{u'name': u'9_1', u'value': u'sunday'}, {u'name': u'9_1', u'value': u'monday'}, {u'name': u'9_1', u'value': u'wednesday'}, {u'name': u'16_1', u'value': u'monday'}, {u'name': u'16_1', u'value': u'tuesday'}, {u'name': u'9_2', u'value': u'monday'}, {u'name': u'9_2', u'value': u'tuesday'}, {u'name': u'9_2', u'value': u'wednesday'}, {u'name': u'16_2', u'value': u'tuesday'}, {u'name': u'16_2', u'value': u'wednesday'}, {u'name': u'9_3', u'value': u'wednesday'}, {u'name': u'9_3', u'value': u'saturday'}, {u'name': u'16_3', u'value': u'thursday'}, {u'name': u'16_3', u'value': u'saturday'}, {u'name': u'9_5', u'value': u'monday'}, {u'name': u'9_5', u'value': u'wednesday'}, {u'name': u'16_5', u'value': u'monday'}, {u'name': u'16_5', u'value': u'tuesday'}, {u'name': u'16_5', u'value': u'wednesday'}, {u'name': u'17_5', u'value': u''}, {u'name': u'18_5', u'value': u''}]