2017-09-14 12 views
0

私はPython辞書のリストを持っています。python辞書を文字列に変換する

{foo1 = ['bar1','bar2'] , foo2 = ['bar3']} 
{foo3 = ['bar4','bar5','bar6'] , foo4 = ['bar7','bar8','bar9']} 
. 
. 
. 
{foo5 = ['bar10'] , foo6 =['bar11','bar12']} 
{foo7 = ['bar13','bar14'] , foo8 = ['bar15','bar16','bar17','bar18']} 

{'foo1':['bar1','bar2'] , 'foo2':['bar3']} 
{'foo3':['bar4','bar5','bar6'] , 'foo4':['bar7','bar8','bar9']} 
. 
. 
. 
{'foo5':['bar10'] , 'foo6':['bar11','bar12']} 
{'foo7':['bar13','bar14'] , 'foo8':['bar15','bar16','bar17','bar18']} 

からPythonの辞書を変換する方法

icinga辞書用のファイルに出力し、これを必要とします。

+0

'{foo = ['bar10']}'は有効なPython構文ではありません。 – Toastrackenigma

答えて

1

あなたが,でそれらを結合、その後、キーと値を反復し、{}でそれらを囲むことができます。

def icinga_form(d): 
    items = ', '.join(
     '{} = {}'.format(key, value) for key, value in d.items() 
    ) 
    return '{%s}' % (items,) 

そしてマップですべての項目に適用します:

list_of_dicts = [ 
    {'foo1': ['bar1', 'bar2'], 'foo2': ['bar3']}, 
    {'foo3': ['bar4', 'bar5', 'bar6'], 'foo4': ['bar7', 'bar8', 'bar9']}, 
    ..., 
    {'foo5': ['bar10'], 'foo6': ['bar11', 'bar12']}, 
    {'foo7': ['bar13', 'bar14'], 'foo8': ['bar15', 'bar16', 'bar17', 'bar18']} 
] 

list_of_icinga = map(icinga_form, list_of_dicts) 

for s in list_of_icinga: 
    print(s) 
{foo1 = ['bar1', 'bar2'], foo2 = ['bar3']} 
{foo3 = ['bar4', 'bar5', 'bar6'], foo4 = ['bar7', 'bar8', 'bar9']} 
... 
{foo5 = ['bar10'], foo6 = ['bar11', 'bar12']} 
{foo7 = ['bar13', 'bar14'], foo8 = ['bar15', 'bar16', 'bar17', 'bar18']} 
0

もしあなたがそれを正確な文字列にしたいのであれば(これはわかりませんが)これはうまくいくはずです:

def dict2str(dict): 
    mystr = '' 
    for item in dict: 
     if mystr == '': 
      mystr = item + ' = ' + str(dict[item]) 
     else: 
      mystr = mystr + ' , ' + item + ' = ' + str(dict[item]) 
    mystr = "{" + mystr + "}" 
    return(mystr) 

しかし、ディクショナリは注文されていないので、正確なパターンが返されるようになる可能性があります。

関連する問題