I am trying to write a function in python which counts the occurrences of letters in the text shifted by x characters. The function works and saves the counted results in the dictionary, but when I want to save this dictionary to another one, the values already saved in it are written by the new dictionary that I add.
Here's my code:
def calcLetter(message):
messageWithoutSpace = message.replace(" ", "")
shift = 6
alphabet = list(string.ascii_lowercase)
position = {}
tempList = {}
for pos in range(0, 6):
for letter in alphabet:
tempList[letter] = {}
textLenght = len(messageWithoutSpace)
tempCount = 0
letterIndex = 0
while textLenght > 0:
if len(messageWithoutSpace) - pos > letterIndex:
if messageWithoutSpace[pos + letterIndex] == letter:
tempCount += 1
letterIndex = letterIndex + shift
textLenght = textLenght - shift
tempList[letter] = tempCount
print("Start position:", pos)
print(tempList)
position[pos] = tempList
print(position)
When I check it for each index, the letters are well counted, but only the last calculations are saved in the final dictionary.
Result:
Start position: 0
{'a': 16, 'b': 1, 'c': 3, 'd': 1, 'e': 10, 'f': 2, 'g': 5, 'h': 5, 'i': 0, 'j': 11, 'k': 7, 'l': 4, 'm': 0, 'n': 9, 'o': 8, 'p': 7, 'q': 3, 'r': 0, 's': 4, 't': 0, 'u': 6, 'v': 7, 'w': 5, 'x': 2, 'y': 5, 'z': 3}
Start position: 1
{'a': 1, 'b': 6, 'c': 1, 'd': 0, 'e': 7, 'f': 20, 'g': 3, 'h': 0, 'i': 7, 'j': 4, 'k': 8, 'l': 2, 'm': 0, 'n': 4, 'o': 0, 'p': 6, 'q': 7, 'r': 10, 's': 3, 't': 5, 'u': 4, 'v': 17, 'w': 1, 'x': 0, 'y': 3, 'z': 4}
Start position: 2
{'a': 4, 'b': 6, 'c': 12, 'd': 6, 'e': 0, 'f': 9, 'g': 4, 'h': 3, 'i': 2, 'j': 0, 'k': 2, 'l': 0, 'm': 4, 'n': 9, 'o': 12, 'p': 2, 'q': 2, 'r': 8, 's': 6, 't': 0, 'u': 5, 'v': 1, 'w': 11, 'x': 2, 'y': 7, 'z': 6}
Start position: 3
{'a': 13, 'b': 6, 'c': 2, 'd': 5, 'e': 2, 'f': 11, 'g': 0, 'h': 2, 'i': 0, 'j': 11, 'k': 1, 'l': 1, 'm': 3, 'n': 2, 'o': 7, 'p': 12, 'q': 2, 'r': 0, 's': 8, 't': 11, 'u': 5, 'v': 3, 'w': 0, 'x': 8, 'y': 0, 'z': 8}
Start position: 4
{'a': 7, 'b': 0, 'c': 6, 'd': 8, 'e': 14, 'f': 0, 'g': 4, 'h': 3, 'i': 9, 'j': 2, 'k': 3, 'l': 1, 'm': 10, 'n': 0, 'o': 5, 'p': 4, 'q': 10, 'r': 7, 's': 9, 't': 0, 'u': 0, 'v': 6, 'w': 6, 'x': 9, 'y': 0, 'z': 0}
Start position: 5
{'a': 2, 'b': 0, 'c': 5, 'd': 4, 'e': 5, 'f': 5, 'g': 0, 'h': 4, 'i': 0, 'j': 7, 'k': 5, 'l': 9, 'm': 0, 'n': 7, 'o': 6, 'p': 16, 'q': 0, 'r': 2, 's': 3, 't': 14, 'u': 2, 'v': 3, 'w': 4, 'x': 1, 'y': 10, 'z': 9}
{0: {'a': 2, 'b': 0, 'c': 5, 'd': 4, 'e': 5, 'f': 5, 'g': 0, 'h': 4, 'i': 0, 'j': 7, 'k': 5, 'l': 9, 'm': 0, 'n': 7, 'o': 6, 'p': 16, 'q': 0, 'r': 2, 's': 3, 't': 14, 'u': 2, 'v': 3, 'w': 4, 'x': 1, 'y': 10, 'z': 9}, 1: {'a': 2, 'b': 0, 'c': 5, 'd': 4, 'e': 5, 'f': 5, 'g': 0, 'h': 4, 'i': 0, 'j': 7, 'k': 5, 'l': 9, 'm': 0, 'n': 7, 'o': 6, 'p': 16, 'q': 0, 'r': 2, 's': 3, 't': 14, 'u': 2, 'v': 3, 'w': 4, 'x': 1, 'y': 10, 'z': 9}, 2: {'a': 2, 'b': 0, 'c': 5, 'd': 4, 'e': 5, 'f': 5, 'g': 0, 'h': 4, 'i': 0, 'j': 7, 'k': 5, 'l': 9, 'm': 0, 'n': 7, 'o': 6, 'p': 16, 'q': 0, 'r': 2, 's': 3, 't': 14, 'u': 2, 'v': 3, 'w': 4, 'x': 1, 'y': 10, 'z': 9}, 3: {'a': 2, 'b': 0, 'c': 5, 'd': 4, 'e': 5, 'f': 5, 'g': 0, 'h': 4, 'i': 0, 'j': 7, 'k': 5, 'l': 9, 'm': 0, 'n': 7, 'o': 6, 'p': 16, 'q': 0, 'r': 2, 's': 3, 't': 14, 'u': 2, 'v': 3, 'w': 4, 'x': 1, 'y': 10, 'z': 9}, 4: {'a': 2, 'b': 0, 'c': 5, 'd': 4, 'e': 5, 'f': 5, 'g': 0, 'h': 4, 'i': 0, 'j': 7, 'k': 5, 'l': 9, 'm': 0, 'n': 7, 'o': 6, 'p': 16, 'q': 0, 'r': 2, 's': 3, 't': 14, 'u': 2, 'v': 3, 'w': 4, 'x': 1, 'y': 10, 'z': 9}, 5: {'a': 2, 'b': 0, 'c': 5, 'd': 4, 'e': 5, 'f': 5, 'g': 0, 'h': 4, 'i': 0, 'j': 7, 'k': 5, 'l': 9, 'm': 0, 'n': 7, 'o': 6, 'p': 16, 'q': 0, 'r': 2, 's': 3, 't': 14, 'u': 2, 'v': 3, 'w': 4, 'x': 1, 'y': 10, 'z': 9}}
This happens because python dictionaries are mutable. You are not making a copy of the dictionary by adding it to your list, you are just referencing the object (and later making changes). Because your list contains repeated references to the same object, the content of all list entries changes.
Try importing copy and changing position[pos] = tempList to position[pos] = copy.copy(tempList).
you need to copy tempList
>>> d = {1: '1', 2: '2'}
>>> l = [d, d.copy()]
>>> d[1] = '3'
>>> l
[{1: '3', 2: '2'}, {1: '1', 2: '2'}]
Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 5 years ago.
Improve this question
I have a distribution here for each codon: 'AAA', 'AAC' etc, in terms of letters representing amino acids
The distribution is arranged in a dictionary. How can I create an histogram that includes the distribution for each of the 64 codons?
[['AAA', {'R': 3, 'I': 3, 'S': 5, 'Y': 4, 'P': 4, 'L': 6, 'K': 5, 'D': 9, 'A': 9, 'T': 3, 'G': 3, 'N': 5, 'M': 3, 'W': 7, 'H': 5, 'V': 6, 'Q': 2, 'E': 4, 'F': 6, 'C': 5}], ['AAC', {'R': 7, 'I': 4, 'S': 5, 'Y': 4, 'P': 6, 'L': 4, 'K': 6, 'D': 5, 'A': 6, 'T': 3, 'G': 5, 'N': 5, 'M': 4, 'W': 2, 'H': 3, 'V': 6, 'Q': 7, 'E': 5, 'F': 5, 'C': 5}], ['AAG', {'R': 5, 'I': 6, 'S': 6, 'Y': 3, 'P': 8, 'L': 4, 'K': 6, 'D': 5, 'A': 6, 'T': 4, 'G': 2, 'N': 4, 'M': 2, 'W': 2, 'H': 5, 'V': 7, 'Q': 8, 'E': 5, 'F': 2, 'C': 7}], ['AAU', {'R': 4, 'I': 7, 'S': 3, 'Y': 6, 'P': 7, 'L': 1, 'K': 6, 'D': 3, 'A': 4, 'T': 6, 'G': 6, 'N': 5, 'M': 4, 'W': 5, 'H': 5, 'V': 2, 'Q': 3, 'E': 7, 'F': 6, 'C': 7}], ['ACA', {'R': 7, 'I': 3, 'S': 3, 'Y': 4, 'P': 5, 'L': 5, 'K': 9, 'D': 6, 'A': 3, 'T': 3, 'G': 5, 'N': 6, 'M': 4, 'W': 2, 'H': 9, 'V': 6, 'Q': 2, 'E': 5, 'F': 5, 'C': 5}], ['ACC', {'R': 5, 'I': 3, 'S': 3, 'Y': 5, 'P': 8, 'L': 2, 'K': 8, 'D': 6, 'A': 4, 'T': 3, 'G': 2, 'N': 5, 'M': 8, 'W': 1, 'H': 6, 'V': 4, 'Q': 5, 'E': 5, 'F': 4, 'C': 10}], ['ACG', {'R': 4, 'I': 7, 'S': 6, 'Y': 5, 'P': 3, 'L': 3, 'K': 4, 'D': 7, 'A': 6, 'T': 4, 'G': 6, 'N': 5, 'M': 7, 'W': 4, 'H': 2, 'V': 7, 'Q': 3, 'E': 2, 'F': 5, 'C': 7}], ['ACU', {'R': 12, 'I': 4, 'S': 6, 'Y': 4, 'P': 6, 'L': 5, 'K': 3, 'D': 5, 'A': 4, 'T': 3, 'G': 2, 'N': 5, 'M': 4, 'W': 6, 'H': 6, 'V': 8, 'Q': 1, 'E': 6, 'F': 5, 'C': 2}], ['AGA', {'R': 4, 'I': 4, 'S': 3, 'Y': 3, 'P': 1, 'L': 7, 'K': 1, 'D': 6, 'A': 5, 'T': 6, 'G': 5, 'N': 7, 'M': 7, 'W': 7, 'H': 2, 'V': 5, 'Q': 7, 'E': 5, 'F': 6, 'C': 6}], ['AGC', {'R': 9, 'I': 2, 'S': 3, 'Y': 6, 'P': 1, 'L': 6, 'K': 3, 'D': 2, 'A': 5, 'T': 5, 'G': 3, 'N': 5, 'M': 10, 'W': 7, 'H': 4, 'V': 8, 'Q': 6, 'E': 3, 'F': 7, 'C': 2}], ['AGG', {'R': 5, 'I': 5, 'S': 7, 'Y': 6, 'P': 5, 'L': 4, 'K': 4, 'D': 5, 'A': 3, 'T': 1, 'G': 4, 'N': 7, 'M': 3, 'W': 4, 'H': 4, 'V': 3, 'Q': 4, 'E': 5, 'F': 7, 'C': 11}], ['AGU', {'R': 5, 'I': 10, 'S': 4, 'Y': 5, 'P': 6, 'L': 5, 'K': 6, 'D': 4, 'A': 4, 'T': 4, 'G': 7, 'N': 5, 'M': 3, 'W': 1, 'H': 3, 'V': 3, 'Q': 6, 'E': 7, 'F': 3, 'C': 6}], ['AUA', {'R': 5, 'I': 5, 'S': 4, 'Y': 4, 'P': 5, 'L': 5, 'K': 1, 'D': 4, 'A': 7, 'T': 3, 'G': 8, 'N': 6, 'M': 3, 'W': 6, 'H': 6, 'V': 6, 'Q': 4, 'E': 6, 'F': 7, 'C': 2}], ['AUC', {'R': 4, 'I': 2, 'S': 5, 'Y': 8, 'P': 9, 'L': 6, 'K': 4, 'D': 5, 'A': 4, 'T': 3, 'G': 4, 'N': 8, 'M': 2, 'W': 4, 'H': 6, 'V': 4, 'Q': 7, 'E': 1, 'F': 1, 'C': 10}], ['AUG', {'R': 3, 'I': 7, 'S': 6, 'Y': 6, 'P': 1, 'L': 5, 'K': 6, 'D': 1, 'A': 3, 'T': 4, 'G': 10, 'N': 3, 'M': 4, 'W': 7, 'H': 5, 'V': 6, 'Q': 7, 'E': 7, 'F': 2, 'C': 4}], ['AUU', {'R': 4, 'I': 3, 'S': 2, 'Y': 5, 'P': 5, 'L': 5, 'K': 7, 'D': 4, 'A': 10, 'T': 2, 'G': 3, 'N': 7, 'M': 3, 'W': 7, 'H': 7, 'V': 5, 'Q': 4, 'E': 4, 'F': 6, 'C': 4}], ['CAA', {'R': 6, 'I': 3, 'S': 2, 'Y': 4, 'P': 5, 'L': 10, 'K': 2, 'D': 7, 'A': 6, 'T': 7, 'G': 3, 'N': 4, 'M': 5, 'W': 5, 'H': 5, 'V': 3, 'Q': 8, 'E': 3, 'F': 5, 'C': 4}], ['CAC', {'R': 9, 'I': 4, 'S': 6, 'Y': 5, 'P': 3, 'L': 1, 'K': 1, 'D': 0, 'A': 12, 'T': 7, 'G': 4, 'N': 7, 'M': 2, 'W': 4, 'H': 4, 'V': 9, 'Q': 4, 'E': 8, 'F': 3, 'C': 4}], ['CAG', {'R': 3, 'I': 1, 'S': 6, 'Y': 3, 'P': 7, 'L': 7, 'K': 5, 'D': 5, 'A': 4, 'T': 2, 'G': 3, 'N': 3, 'M': 4, 'W': 6, 'H': 8, 'V': 6, 'Q': 9, 'E': 7, 'F': 5, 'C': 3}], ['CAU', {'R': 5, 'I': 6, 'S': 2, 'Y': 3, 'P': 7, 'L': 7, 'K': 6, 'D': 6, 'A': 1, 'T': 4, 'G': 11, 'N': 7, 'M': 4, 'W': 5, 'H': 4, 'V': 5, 'Q': 2, 'E': 8, 'F': 2, 'C': 2}], ['CCA', {'R': 5, 'I': 7, 'S': 1, 'Y': 2, 'P': 4, 'L': 4, 'K': 5, 'D': 7, 'A': 5, 'T': 7, 'G': 1, 'N': 4, 'M': 9, 'W': 8, 'H': 5, 'V': 6, 'Q': 3, 'E': 3, 'F': 6, 'C': 5}], ['CCC', {'R': 4, 'I': 3, 'S': 8, 'Y': 5, 'P': 4, 'L': 3, 'K': 4, 'D': 6, 'A': 5, 'T': 4, 'G': 4, 'N': 8, 'M': 1, 'W': 7, 'H': 4, 'V': 7, 'Q': 7, 'E': 5, 'F': 3, 'C': 5}], ['CCG', {'R': 3, 'I': 4, 'S': 7, 'Y': 2, 'P': 4, 'L': 3, 'K': 4, 'D': 3, 'A': 6, 'T': 5, 'G': 5, 'N': 3, 'M': 4, 'W': 5, 'H': 8, 'V': 3, 'Q': 5, 'E': 8, 'F': 7, 'C': 8}], ['CCU', {'R': 8, 'I': 3, 'S': 2, 'Y': 5, 'P': 4, 'L': 4, 'K': 2, 'D': 6, 'A': 5, 'T': 6, 'G': 8, 'N': 6, 'M': 4, 'W': 3, 'H': 5, 'V': 4, 'Q': 4, 'E': 7, 'F': 5, 'C': 6}], ['CGA', {'R': 5, 'I': 2, 'S': 6, 'Y': 6, 'P': 6, 'L': 3, 'K': 1, 'D': 5, 'A': 5, 'T': 7, 'G': 5, 'N': 7, 'M': 8, 'W': 4, 'H': 3, 'V': 4, 'Q': 6, 'E': 7, 'F': 5, 'C': 2}], ['CGC', {'R': 4, 'I': 3, 'S': 5, 'Y': 4, 'P': 6, 'L': 3, 'K': 5, 'D': 5, 'A': 6, 'T': 6, 'G': 7, 'N': 1, 'M': 3, 'W': 5, 'H': 3, 'V': 7, 'Q': 8, 'E': 7, 'F': 3, 'C': 6}], ['CGG', {'R': 2, 'I': 3, 'S': 3, 'Y': 6, 'P': 6, 'L': 5, 'K': 6, 'D': 2, 'A': 4, 'T': 4, 'G': 10, 'N': 2, 'M': 3, 'W': 6, 'H': 3, 'V': 3, 'Q': 4, 'E': 6, 'F': 13, 'C': 6}], ['CGU', {'R': 3, 'I': 5, 'S': 1, 'Y': 3, 'P': 9, 'L': 3, 'K': 6, 'D': 4, 'A': 5, 'T': 4, 'G': 4, 'N': 8, 'M': 7, 'W': 5, 'H': 3, 'V': 7, 'Q': 7, 'E': 4, 'F': 5, 'C': 4}], ['CUA', {'R': 7, 'I': 4, 'S': 2, 'Y': 5, 'P': 8, 'L': 6, 'K': 4, 'D': 1, 'A': 5, 'T': 4, 'G': 3, 'N': 3, 'M': 8, 'W': 6, 'H': 5, 'V': 5, 'Q': 5, 'E': 9, 'F': 3, 'C': 4}], ['CUC', {'R': 5, 'I': 3, 'S': 6, 'Y': 6, 'P': 2, 'L': 13, 'K': 2, 'D': 4, 'A': 3, 'T': 3, 'G': 5, 'N': 9, 'M': 2, 'W': 3, 'H': 4, 'V': 7, 'Q': 5, 'E': 2, 'F': 6, 'C': 7}], ['CUG', {'R': 5, 'I': 4, 'S': 5, 'Y': 6, 'P': 5, 'L': 2, 'K': 2, 'D': 5, 'A': 2, 'T': 3, 'G': 3, 'N': 6, 'M': 5, 'W': 9, 'H': 2, 'V': 6, 'Q': 5, 'E': 2, 'F': 7, 'C': 13}], ['CUU', {'R': 8, 'I': 4, 'S': 2, 'Y': 3, 'P': 5, 'L': 6, 'K': 8, 'D': 3, 'A': 5, 'T': 2, 'G': 8, 'N': 2, 'M': 4, 'W': 3, 'H': 6, 'V': 9, 'Q': 5, 'E': 2, 'F': 4, 'C': 8}], ['GAA', {'R': 2, 'I': 8, 'S': 6, 'Y': 5, 'P': 3, 'L': 9, 'K': 7, 'D': 3, 'A': 5, 'T': 8, 'G': 4, 'N': 3, 'M': 8, 'W': 3, 'H': 3, 'V': 4, 'Q': 3, 'E': 6, 'F': 4, 'C': 3}], ['GAC', {'R': 5, 'I': 4, 'S': 2, 'Y': 4, 'P': 7, 'L': 2, 'K': 3, 'D': 7, 'A': 8, 'T': 6, 'G': 9, 'N': 4, 'M': 4, 'W': 6, 'H': 5, 'V': 2, 'Q': 6, 'E': 3, 'F': 4, 'C': 6}], ['GAG', {'R': 6, 'I': 2, 'S': 9, 'Y': 3, 'P': 5, 'L': 9, 'K': 2, 'D': 6, 'A': 2, 'T': 4, 'G': 8, 'N': 6, 'M': 1, 'W': 3, 'H': 4, 'V': 8, 'Q': 5, 'E': 8, 'F': 5, 'C': 1}], ['GAU', {'R': 4, 'I': 4, 'S': 5, 'Y': 9, 'P': 6, 'L': 9, 'K': 4, 'D': 1, 'A': 7, 'T': 8, 'G': 5, 'N': 6, 'M': 7, 'W': 3, 'H': 6, 'V': 2, 'Q': 3, 'E': 2, 'F': 4, 'C': 2}], ['GCA', {'R': 9, 'I': 7, 'S': 2, 'Y': 4, 'P': 7, 'L': 4, 'K': 7, 'D': 7, 'A': 7, 'T': 3, 'G': 4, 'N': 2, 'M': 3, 'W': 4, 'H': 5, 'V': 3, 'Q': 4, 'E': 4, 'F': 6, 'C': 5}], ['GCC', {'R': 5, 'I': 2, 'S': 6, 'Y': 4, 'P': 5, 'L': 5, 'K': 11, 'D': 2, 'A': 5, 'T': 6, 'G': 4, 'N': 4, 'M': 4, 'W': 3, 'H': 8, 'V': 6, 'Q': 4, 'E': 3, 'F': 5, 'C': 5}], ['GCG', {'R': 4, 'I': 6, 'S': 8, 'Y': 7, 'P': 5, 'L': 3, 'K': 7, 'D': 5, 'A': 4, 'T': 7, 'G': 7, 'N': 3, 'M': 2, 'W': 4, 'H': 3, 'V': 5, 'Q': 3, 'E': 6, 'F': 5, 'C': 3}], ['GCU', {'R': 5, 'I': 9, 'S': 4, 'Y': 8, 'P': 2, 'L': 7, 'K': 6, 'D': 0, 'A': 9, 'T': 3, 'G': 6, 'N': 3, 'M': 3, 'W': 6, 'H': 6, 'V': 4, 'Q': 3, 'E': 1, 'F': 3, 'C': 9}], ['GGA', {'R': 3, 'I': 7, 'S': 5, 'Y': 4, 'P': 4, 'L': 10, 'K': 5, 'D': 5, 'A': 7, 'T': 7, 'G': 3, 'N': 3, 'M': 3, 'W': 6, 'H': 4, 'V': 3, 'Q': 7, 'E': 2, 'F': 6, 'C': 3}], ['GGC', {'R': 2, 'I': 5, 'S': 5, 'Y': 3, 'P': 3, 'L': 3, 'K': 5, 'D': 8, 'A': 4, 'T': 11, 'G': 8, 'N': 6, 'M': 6, 'W': 2, 'H': 3, 'V': 5, 'Q': 2, 'E': 5, 'F': 8, 'C': 3}], ['GGG', {'R': 7, 'I': 3, 'S': 10, 'Y': 6, 'P': 6, 'L': 6, 'K': 3, 'D': 10, 'A': 2, 'T': 5, 'G': 2, 'N': 5, 'M': 2, 'W': 3, 'H': 5, 'V': 3, 'Q': 10, 'E': 3, 'F': 1, 'C': 5}], ['GGU', {'R': 6, 'I': 8, 'S': 5, 'Y': 4, 'P': 5, 'L': 8, 'K': 2, 'D': 4, 'A': 2, 'T': 6, 'G': 9, 'N': 8, 'M': 3, 'W': 2, 'H': 5, 'V': 1, 'Q': 5, 'E': 5, 'F': 6, 'C': 3}], ['GUA', {'R': 5, 'I': 4, 'S': 3, 'Y': 4, 'P': 6, 'L': 7, 'K': 2, 'D': 5, 'A': 6, 'T': 5, 'G': 2, 'N': 11, 'M': 3, 'W': 6, 'H': 5, 'V': 4, 'Q': 6, 'E': 5, 'F': 4, 'C': 4}], ['GUC', {'R': 2, 'I': 3, 'S': 5, 'Y': 6, 'P': 6, 'L': 4, 'K': 4, 'D': 4, 'A': 4, 'T': 4, 'G': 1, 'N': 7, 'M': 3, 'W': 4, 'H': 7, 'V': 9, 'Q': 8, 'E': 4, 'F': 8, 'C': 4}], ['GUG', {'R': 5, 'I': 7, 'S': 5, 'Y': 5, 'P': 3, 'L': 3, 'K': 3, 'D': 7, 'A': 4, 'T': 3, 'G': 3, 'N': 5, 'M': 10, 'W': 3, 'H': 3, 'V': 7, 'Q': 3, 'E': 8, 'F': 5, 'C': 5}], ['GUU', {'R': 3, 'I': 0, 'S': 2, 'Y': 4, 'P': 7, 'L': 6, 'K': 7, 'D': 6, 'A': 7, 'T': 3, 'G': 5, 'N': 8, 'M': 7, 'W': 4, 'H': 3, 'V': 5, 'Q': 6, 'E': 6, 'F': 2, 'C': 6}], ['UAA', {'R': 0, 'I': 0, 'S': 0, 'Y': 0, 'P': 0, 'L': 0, 'K': 0, 'D': 0, 'A': 0, 'T': 0, 'G': 0, 'N': 0, 'M': 0, 'W': 0, 'H': 0, 'V': 0, 'Q': 0, 'E': 0, 'F': 0, 'C': 0}], ['UAC', {'R': 4, 'I': 2, 'S': 5, 'Y': 4, 'P': 4, 'L': 2, 'K': 2, 'D': 6, 'A': 4, 'T': 6, 'G': 4, 'N': 9, 'M': 4, 'W': 10, 'H': 5, 'V': 5, 'Q': 3, 'E': 5, 'F': 5, 'C': 8}], ['UAG', {'R': 0, 'I': 0, 'S': 0, 'Y': 0, 'P': 0, 'L': 0, 'K': 0, 'D': 0, 'A': 0, 'T': 0, 'G': 0, 'N': 0, 'M': 0, 'W': 0, 'H': 0, 'V': 0, 'Q': 0, 'E': 0, 'F': 0, 'C': 0}], ['UAU', {'R': 7, 'I': 4, 'S': 3, 'Y': 3, 'P': 7, 'L': 5, 'K': 7, 'D': 6, 'A': 3, 'T': 6, 'G': 4, 'N': 3, 'M': 4, 'W': 4, 'H': 9, 'V': 5, 'Q': 6, 'E': 4, 'F': 1, 'C': 6}], ['UCA', {'R': 6, 'I': 2, 'S': 2, 'Y': 3, 'P': 5, 'L': 7, 'K': 4, 'D': 6, 'A': 2, 'T': 8, 'G': 8, 'N': 5, 'M': 4, 'W': 8, 'H': 3, 'V': 4, 'Q': 4, 'E': 4, 'F': 7, 'C': 5}], ['UCC', {'R': 3, 'I': 2, 'S': 7, 'Y': 5, 'P': 2, 'L': 4, 'K': 4, 'D': 6, 'A': 0, 'T': 10, 'G': 5, 'N': 9, 'M': 4, 'W': 4, 'H': 7, 'V': 5, 'Q': 4, 'E': 4, 'F': 3, 'C': 9}], ['UCG', {'R': 8, 'I': 2, 'S': 6, 'Y': 4, 'P': 8, 'L': 4, 'K': 7, 'D': 4, 'A': 2, 'T': 5, 'G': 3, 'N': 3, 'M': 1, 'W': 9, 'H': 2, 'V': 7, 'Q': 4, 'E': 6, 'F': 5, 'C': 7}], ['UCU', {'R': 4, 'I': 5, 'S': 6, 'Y': 4, 'P': 5, 'L': 3, 'K': 5, 'D': 8, 'A': 5, 'T': 6, 'G': 4, 'N': 8, 'M': 6, 'W': 6, 'H': 4, 'V': 3, 'Q': 6, 'E': 2, 'F': 4, 'C': 3}], ['UGA', {'R': 0, 'I': 0, 'S': 0, 'Y': 0, 'P': 0, 'L': 0, 'K': 0, 'D': 0, 'A': 0, 'T': 0, 'G': 0, 'N': 0, 'M': 0, 'W': 0, 'H': 0, 'V': 0, 'Q': 0, 'E': 0, 'F': 0, 'C': 0}], ['UGC', {'R': 2, 'I': 3, 'S': 6, 'Y': 2, 'P': 4, 'L': 8, 'K': 6, 'D': 3, 'A': 4, 'T': 4, 'G': 5, 'N': 12, 'M': 5, 'W': 6, 'H': 6, 'V': 2, 'Q': 4, 'E': 5, 'F': 5, 'C': 5}], ['UGG', {'R': 3, 'I': 6, 'S': 6, 'Y': 8, 'P': 6, 'L': 6, 'K': 2, 'D': 10, 'A': 2, 'T': 5, 'G': 2, 'N': 1, 'M': 5, 'W': 5, 'H': 3, 'V': 7, 'Q': 7, 'E': 4, 'F': 5, 'C': 4}], ['UGU', {'R': 5, 'I': 5, 'S': 6, 'Y': 5, 'P': 3, 'L': 4, 'K': 5, 'D': 6, 'A': 4, 'T': 10, 'G': 6, 'N': 4, 'M': 8, 'W': 4, 'H': 3, 'V': 7, 'Q': 6, 'E': 2, 'F': 2, 'C': 2}], ['UUA', {'R': 4, 'I': 4, 'S': 4, 'Y': 6, 'P': 2, 'L': 3, 'K': 8, 'D': 2, 'A': 2, 'T': 9, 'G': 3, 'N': 9, 'M': 5, 'W': 7, 'H': 6, 'V': 5, 'Q': 6, 'E': 5, 'F': 4, 'C': 3}], ['UUC', {'R': 1, 'I': 6, 'S': 4, 'Y': 8, 'P': 4, 'L': 5, 'K': 7, 'D': 2, 'A': 8, 'T': 5, 'G': 7, 'N': 7, 'M': 1, 'W': 2, 'H': 4, 'V': 9, 'Q': 2, 'E': 3, 'F': 6, 'C': 6}], ['UUG', {'R': 3, 'I': 3, 'S': 2, 'Y': 5, 'P': 4, 'L': 6, 'K': 6, 'D': 7, 'A': 3, 'T': 4, 'G': 1, 'N': 8, 'M': 6, 'W': 4, 'H': 7, 'V': 7, 'Q': 7, 'E': 5, 'F': 2, 'C': 7}], ['UUU', {'R': 3, 'I': 4, 'S': 4, 'Y': 6, 'P': 6, 'L': 6, 'K': 5, 'D': 3, 'A': 6, 'T': 6, 'G': 4, 'N': 3, 'M': 5, 'W': 8, 'H': 2, 'V': 6, 'Q': 6, 'E': 7, 'F': 5, 'C': 2}]]
I'm not sure this is answering the question but in general pandas is a great tool for this.
import pandas as pd
df = pd.DataFrame(dict(x[0])
This gives you a convenient table.
AAA AAC AAG AAU
A 9 6 6 4
C 5 5 7 7
D 9 5 5 3
E 4 5 5 7
Then you can sum over the columns if you like.
df.sum(axis=1)
resulting in
A 290
C 314
D 295
E 292
F 289
G 295
...
Or if you would rather create a bar chart for each codon you can do e.g.
df.AAA.plot(kind='bar')
I have 2 lists of python dicts: realList and expectedList
I want realList to be considered equal to expectedList if there is one, and only one, "sub-dict" on realList for each dict of expectedList
By sub-dict I mean a dict with at least the same key/values, but which might have additional key/values.
so, for example:
realDict = [{'a': 1, 'b': 2}, {'a': 2, 'b': 3}]
==
expectedDict = [{'a': 1}, {'a': 2, 'b': 3}]
realDict = [{'a': 1, 'b': 2}, {'a': 2, 'b': 3}]
!=
expectedDict = [{'a': 2}, {'a': 2, 'b': 3}]
realDict = [{'a': 1, 'b': 2}, {'a': 1, 'b': 3}]
!=
expectedDict = [{'a': 1}]
Any modules to help? Only idea I can think of is iterating over expectedDict and removing a dict from it and from realDict whenever they match. Then, in the end, both must be [].
This works, but I'm unsure how performant it is:
def complete_subset(real_list, expected_list):
real_set_list = [set(d.items()) for d in real_list]
expected_set_list = [set(d.items()) for d in expected_list]
while len(real_set_list):
real_len = len(real_set_list)
i = 0
for real_set in real_set_list:
for expected_set in expected_set_list:
if not len(expected_set - real_set):
real_set_list.remove(real_set)
expected_set_list.remove(expected_set)
i = i + 1
if i == real_len:
break
return (not len(real_set_list)) and (not len(expected_set_list))
Here are my tests:
print complete_subset([{'a': 1, 'b': 2}, {'a': 2, 'b': 3}], [{'a': 1}, {'a': 2, 'b': 3}]) == True
print complete_subset([{'a': 1, 'b': 2}, {'a': 2, 'b': 3}], [{'a': 2}, {'a': 2, 'b': 3}]) == False
print complete_subset([{'a': 1, 'b': 2}, {'a': 2, 'b': 3}], [{'a': 1}]) == False
print complete_subset([{'a': 1, 'b': 2}, {'a': 1, 'b': 2}], [{'a': 1}, {'b': 2}]) == True
print complete_subset([
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7, 'h': 8, 'i': 9, 'j': 10},
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7, 'h': 8, 'i': 9, 'j': 10},
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7, 'h': 8, 'i': 9, 'j': 10},
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7, 'h': 8, 'i': 9, 'j': 10},
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7, 'h': 8, 'i': 9, 'j': 10},
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7, 'h': 8, 'i': 9, 'j': 10},
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7, 'h': 8, 'i': 9, 'j': 10},
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7, 'h': 8, 'i': 9, 'j': 10},
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7, 'h': 8, 'i': 9, 'j': 10},
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7, 'h': 8, 'i': 9, 'j': 10},
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7, 'h': 8, 'i': 9, 'j': 10},
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7, 'h': 8, 'i': 9, 'j': 10},
], [
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7, 'h': 8, 'i': 9},
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7, 'h': 8},
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7},
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6},
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5},
{'a': 1, 'b': 2, 'c': 3, 'd': 4},
{'a': 1, 'b': 2, 'c': 3},
{'a': 1, 'b': 2},
{'a': 1},
{'a': 1, 'c': 3, 'd': 4, 'f': 6, 'g': 7, 'h': 8, 'i': 9, 'j': 10},
{'a': 1, 'b': 2, 'c': 3, 'e': 5, 'f': 6, 'h': 8, 'i': 9, 'j': 10},
{'a': 1, 'b': 2, 'd': 4, 'e': 5, 'g': 7, 'h': 8, 'j': 10},
]) == True
In case your two lists are to be compared element by element, you can do it this way.
def compare(realDict, expectedDict):
if len(readDict) != len(expectedDict):
return False
for d1, d2 in zip(realDict, expectedDict):
for key in d2:
if key not in d1 or d1[key] != d2[key]:
return False
return True