2017-08-07 4 views
0

です。私は季節と月の辞書を持っています。Python:listは辞書項目で構成され、リスト内にあればキーを削除します。値は

OPEN = {"march": ["spring"],"october": ["autumn"],"april": ["spring"], 
    "january": ["winter"],"december": ["winter","christmast_holiday"], 
    "september": ["autumn"],"july":"summer","summer_holidays"], 
    "august": ["summer","summer_holidays"],"november": ["autumn"], 
    "may": ["spring"],"june": ["summer"],"february": ["winter"]} 

私は、ユーザーからの開放時間を尋ねるプログラムを持っています。ユーザーは、季節、休日、月の両方に配置することができ、プログラムはこれらのリストを作成します。私の問題は、このリストにキーと値の両方がある場合、値が過大であることです。リストには夏と夕方の両方がある場合は、6月は過度です。

はそうだとすれば、リストはこのようなものです:

open_time = [may, june, september, october, summer]

それは次のようになりますので、6月には、削除する必要があります:

open_time = [may, september, october, summer]

私が試してみました:

list = [] 
    for i in open_time: 
     for key,value in OPEN: 
      if value == OPEN[i]: 
       list.append(v) 
    open_time = open_time - list 

これを行う方法ネ?

+4

。 –

+0

あなたの例では、最初の 'open_time'は' open_time = [may、june、september、october、summer] 'のようなものを最初に読みますか? – PaSTE

+0

あなたは最初のopen_timeが何を保持しているのかを教えてください。その後、何を削除する必要がありますか?今すぐ、その質問に従うことは困難 – Tammy

答えて

-1

正しく理解していれば、辞書からキーを削除しようとしています。リストを作成するのではなく、反復しながらキーを削除するだけです。

for i in open_time: 
    for key,value in OPEN: 
     if value == OPEN[i]: 
      open_time.pop(v) 
+0

誰もがdownvoteを説明する気に? – tnknepp

0

その月を説明する季節が既にリストにある場合は、リストから1か月を削除したいようです。あなたはシーズンキーを与えを検索したいので、これを行うための効率的な方法は、あなたが持っている辞書を逆にしてopen_timeためsetではなく、リストを使用することです:

0

あなたが望むものを理解できたかどうかはわかりませんが、ここでは何をしようとしているのかを説明するコメントがあります。

OPEN = {"march": ["spring"],"october": ["autumn"],"april": ["spring"], 
    "january": ["winter"],"december": ["winter","christmast_holiday"], 
    "september": ["autumn"],"july":"summer", 
    "august": ["summer","summer_holidays"],"november": ["autumn"], 
    "may": ["spring"],"june": ["summer"],"february": ["winter"]} 

open_time = ["may", "june", "september", "october", "summer"] 

for item in open_time: # Loop through the open_time list (pretend item = "june") 
    if item in OPEN: 
    item = OPEN[item] 
    if item[0] in open_time: # Checks if the value of "june" is also in your list open_time 
     open_time.remove(item[0]) # If the value is in the open_time list, remove it. 
print(open_time) 
0

私はこのコードを思い付いた:あなたは**、少なくともそれリテラル有効なPython行い、偽のデータを作るのトラブルに行くことを予定している場合**

MAPPING = { 
    "january": ["winter"], 
    "february": ["winter"], 
    "march": ["spring"], 
    "april": ["spring"], 
    "may": ["spring"], 
    "june": ["summer"], 
    "july": ["summer", "summer_holidays"], 
    "august": ["summer", "summer_holidays"], 
    "september": ["autumn"], 
    "october": ["autumn"], 
    "november": ["autumn"], 
    "december": ["winter", "christmas_holiday"] 
} 


samples = { 
    'sample1': { 
     'open_time': ['may', 'september', 'october', 'summer'] 
    }, 
    'sample2': { 
     'open_time': ['may', 'june', 'september', 'october', 'summer'], 
    }, 
    'sample3': { 
     'open_time': ['december', 'winter'], 
    } 
} 


def remove_duplicates(open_times): 
    months = [x for x in open_times if x in MAPPING] 
    seasons = [x for x in open_times if x not in months] 

    final = seasons[:] 
    for month in months: 
     season_already_present = False 
     for season in seasons: 
      if season in MAPPING[month]: 
       season_already_present = True 
       break 

     if not season_already_present: 
      final.append(month) 

    return final 


for sample_data in samples.values(): 
    sample_data['open_time'] = remove_duplicates(sample_data['open_time']) 
関連する問題