ฉันกำลังพยายามจัดกลุ่มสตริงไบนารี่ของตัวเลขบางตัวร่วมกันโดยพิจารณาจากจำนวน 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
หากไม่มีคีย์หรือค่าเริ่มต้นใด ๆ ที่ให้มาในขณะที่ผู้ดำเนินการดัชนี[]
แจ้งข้อผิดพลาดหากไม่มีคีย์