[英]Why are blank lines being added in CSV file when running python script multiple times?
[英]python - Append values are being added to multiple times to the list when I am adding onl
from itertools import permutations, product
def sensitivity_analysis(a,b):
length_a=len(a.keys())
length_b=len(b.keys())
items_a=list(a.keys())
items_b=list(b.keys())
a_variants = [dict(zip(items_a, values))
for values in product((list(p) for p in permutations(items_b)), repeat=length_a)]
b_variants = [dict(zip(items_b, values))
for values in product((list(v) for v in permutations(items_a)), repeat=length_b)]
all_variants = product(a_variants, b_variants)
contains_a=[]
contains_b=[]
for i,j in all_variants:
contains_a.append(i)
contains_b.append(j)
return contains_a,contains_b
def insert_dummies(a,b):
length_a=len(a.keys())
length_b=len(b.keys())
items_a=list(a.keys())
items_b=list(b.keys())
dummy_list=[]
if length_a>length_b:
dummy_number=length_a-length_b
nummer=1
while nummer<dummy_number+1:
dummy_list.append("Dummy%d" %nummer)
nummer=nummer+1
for i in items_a:
f=0
while dummy_number>f:
a.setdefault(i,[]).append(dummy_list[f])
f=f+1
n=0
while n<(dummy_number):
for z in dummy_list:
b[z]=items_a
n=n+1
if length_a<length_b:
dummy_number=length_b-length_a
nummer=1
while nummer<dummy_number+1:
dummy_list.append("Dummy%d" %nummer)
nummer=nummer+1
for i in items_b:
f=0
while dummy_number>f:
b.setdefault(i,[]).append(dummy_list[f])
f=f+1
n=0
while n<(dummy_number):
for z in dummy_list:
a[z]=items_b
n=n+1
else:
return
return a,b
ab={"kart":["marie","alice"],
"vinod":["alice","marie"],
"jordan":["marie","alice"],
"joe":["marie","alice"]}
ba={"alice":["kart","vinod","joe","jordan"],
"marie":["kart","vinod","jordan","joe"]}
thelist1=sensitivity_analysis(ab,ba)[0]
thelist2=sensitivity_analysis(ab,ba)[1]
insert_dummies(thelist1[0],thelist2[0])
我在這里有兩個功能。 一種是靈敏度分析,它返回兩個字典ab和ba的所有可能組合。 insert_dummies函數打算通過添加虛擬變量來使兩個字典相乘。 例如,上面的字典在添加了虛擬變量后應如下所示。
{'kart': ['marie', 'alice', 'Dummy1', 'Dummy2'],
'vinod': ['alice', 'marie', 'Dummy1', 'Dummy2'],
'jordan': ['marie', 'alice', 'Dummy1', 'Dummy2'],
'joe': ['marie', 'alice', 'Dummy1', 'Dummy2']},
{'alice': ['kart', 'vinod', 'joe', 'jordan'],
'marie': ['kart', 'vinod', 'jordan', 'joe'],
'Dummy1': ['kart', 'vinod', 'jordan', 'joe'],
'Dummy2': ['kart', 'vinod', 'jordan', 'joe']}
但是在這種情況下,對於字典ab中的每個鍵,虛擬1和虛擬2被添加4次。 另外,thelist1和thelist2也添加了虛擬變量。 我在這里做錯了什么? 任何幫助表示贊賞!
問題是我以某種方式創建的字典具有指向同一列表而不是四個相等列表的鍵。 這意味着我更改了單個值,所有其他值似乎也都更改了(實際上,它只是單個對象)。
我已通過更改字典結構以使值具有不同的標識來解決此問題。
newdic1 = {k:v[:] for k, v in list1[i].items()}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.