ฉันกำลังพยายามจัดกลุ่มสตริงไบนารี่ของตัวเลขบางตัวร่วมกันโดยพิจารณาจากจำนวน 1 ในสตริง
สิ่งนี้ใช้ไม่ได้:
s = "0 1 3 7 8 9 11 15"
numbers = map(int, s.split())
binaries = [bin(x)[2:].rjust(4, '0') for x in numbers]
one_groups = dict.fromkeys(range(5), [])
for x in binaries:
one_groups[x.count('1')] += [x]
พจนานุกรมที่คาดหวังone_groupsจะต้องมี
{0: ['0000'],
1: ['0001', '1000'],
2: ['0011', '1001'],
3: ['0111', '1011'],
4: ['1111']}
แต่ฉันได้
{0: ['0000', '0001', '0011', '0111', '1000', '1001', '1011', '1111'],
1: ['0000', '0001', '0011', '0111', '1000', '1001', '1011', '1111'],
2: ['0000', '0001', '0011', '0111', '1000', '1001', '1011', '1111'],
3: ['0000', '0001', '0011', '0111', '1000', '1001', '1011', '1111'],
4: ['0000', '0001', '0011', '0111', '1000', '1001', '1011', '1111']}
จนถึงตอนนี้สิ่งเดียวที่ใช้ได้คือถ้าฉันใช้one_groups[x.count('1')] = one_groups.get(x.count('1')) + [x]แทนone_groups[x.count('1')] += [x]
แต่ทำไมถึงเป็นเช่นนั้น? หากฉันจำได้อย่างถูกต้องไม่dict[key]ควรส่งคืนค่าของพจนานุกรมนั้นคล้ายกับวิธีการdict.get(key)ทำงานอย่างไร ฉันเคยเห็นกระทู้นี้แล้วทำไม dict.get (กุญแจ) แทนที่จะเป็น dict [key] แต่มันไม่ได้ตอบคำถามของฉันสำหรับกรณีนี้เนื่องจากฉันรู้ว่าโปรแกรมไม่ได้หมายถึงการได้รับKeyError
ฉันเคยลองแล้วone_groups[x.count('1')].append(x)แต่มันก็ไม่ได้ผลเหมือนกัน
bin(x)[2:].rjust(4, '0')สามารถทำให้ง่าย'{:0>4b}'.format(x)ขึ้น
binariesไม่เกี่ยวข้องกับคำถามดังนั้นคุณสามารถระบุมูลค่าของมันได้
getส่งคืนNoneหากไม่มีคีย์หรือค่าเริ่มต้นใด ๆ ที่ให้มาในขณะที่ผู้ดำเนินการดัชนี[]แจ้งข้อผิดพลาดหากไม่มีคีย์