Dictionarys combine python - python

I want to combine 2 dictionarys. Search a bit but couldn't find it yet. Because I don't really know how it's called.
But this are the two dictonary's I got:
Number 1:
Counter({'gag': 19, 'ccc': 15, 'cct': 15, 'ctg': 15, 'tcc': 13, 'aag': 13, 'atg': 12, 'cag': 12, 'gcc': 12, 'gaa': 11, 'gat': 11, 'aac': 10, 'gtg': 10, 'cca': 9, 'gac': 9, 'acc': 9, 'ggg': 9, 'agc': 8, 'cgc': 8, 'tct': 7, 'aaa': 7, 'ttc': 7, 'atc': 7, 'cac': 7, 'aca': 7, 'gct': 6, 'ccg': 6, 'ttg': 6, 'ggc': 6, 'tgc': 6, 'tca': 6, 'tac': 6, 'gca': 5, 'ctc': 5, 'ggt': 5, 'cat': 5, 'gtt': 5, 'cgt': 5, 'ttt': 4, 'tgt': 4, 'act': 4, 'aat': 4, 'tgg': 4, 'cga': 4, 'agt': 4, 'tat': 3, 'gga': 3, 'cgg': 3, 'cta': 3, 'agg': 3, 'caa': 3, 'ctt': 3, 'gtc': 3, 'aga': 3, 'acg': 2, 'gcg': 1, 'att': 1, 'tga': 1})
And number 2:
{'Phe': ['ttt', 'ttc'], 'Stop': ['tag', 'tga', 'taa'], 'Pro': ['cct', 'ccc', 'cca', 'ccg'], 'Trp': ['tgg'], 'Met': ['atg'], 'Lys': ['aaa', 'aag'], 'His': ['cat', 'cac'], 'Asp': ['gat', 'gac'], 'Start': ['atg', 'ctg', 'ttg', 'gtg', 'att'], 'Thr': ['act', 'acc', 'aca', 'acg'], 'Tyr': ['tat', 'tac'], 'Glu': ['gaa', 'cag'], 'Asn': ['aat', 'aac'], 'Val': ['gtt', 'gtc', 'gta', 'gtg'], 'Ser': ['tct', 'tcc', 'tca', 'tcg', 'agt', 'agc'], 'Cys': ['tgt', 'tgc'], 'Ile': ['att', 'atc', 'ata'], 'Leu': ['tta', 'ttg', 'ctt', 'ctc', 'cta', 'ctg'], 'Gly': ['ggt', 'ggc', 'gga', 'ggg'], 'Gln': ['caa', 'cag'], 'Arg': ['cgt', 'cgc', 'cga', 'cgg', 'aga', 'agg'], 'Ala': ['gct', 'gcc', 'gca', 'gcg']}
Now I want to count how much from every amino acid (dic 2 with phe, pro, trp, etc.) are made. So for example:
Phe has 'ttt' and 'ttc' I want to count how many phe's are in the 1st dic. But I don't know how, can anyone help?

You can calculate the sums using a default value of 0 for those not found using this line:
sums = {k: sum(counter.get(tv, 0) for tv in v) for k, v in dictionary.items()}
Assuming counter is the first mapping and dictionary is the second mapping.

You can create a new dictionary for the sums:
total = {k: sum(number1.get(subk, 0) for subk in v) for k, v in number2.items()}

If I understand correctly you are looking for something like this.
def get_count(name):
count = 0
for item in number2[name]:
count += number1.get(item) or 0
return count
get_count('Phe')

Related

How to change the color of bars in a bar graph according to its x ticks? (Matplotlib, Python)

I want to change the bar color of the state: AZ, CA, FL, NY, OH, and OK. I did it by counting the index; however, I am wondering if I can change the color according to the names of the x ticks.
import matplotlib.pylab as plt
fig=plt.figure(figsize=(10,8), dpi= 90)
lists = sorted(frequency_state.items())
x, y = zip(*lists)
bars = plt.bar(x, y, color = 'grey')
plt.grid()
plt.xticks(rotation = 90)
for i in [2,3,5,23,24,25,31]:
bars[i].set_color('r')
plt.show()
{'FL': 45,
'OK': 37,
'OH': 33,
'NY': 28,
'TX': 27,
'CA': 25,
'AZ': 17,
'GA': 10,
'KY': 9,
'MN': 8,
'MA': 8,
'LA': 8,
'PA': 7,
'ID': 7,
'NJ': 6,
'VA': 6,
'IN': 6,
'MT': 6,
'TN': 5,
'CT': 5,
'NC': 5,
'WI': 5,
'MD': 4,
'IL': 4,
'UT': 3,
'IA': 3,
'MI': 3,
'AR': 2,
'MO': 2,
'SC': 2,
'AL': 2,
'NV': 2,
'OR': 1,
'SD': 1,
'ND': 1}
Here is the graph:
Normalize the value in the colormap you want to display and set it to the desired color of the bar chart.
import matplotlib.pylab as plt
import matplotlib.colors as mcolors
frequency_state = {'FL': 45, 'OK': 37, 'OH': 33, 'NY': 28, 'TX': 27, 'CA': 25, 'AZ': 17, 'GA': 10, 'KY': 9, 'MN': 8,
'MA': 8, 'LA': 8, 'PA': 7, 'ID': 7, 'NJ': 6, 'VA': 6, 'IN': 6, 'MT': 6, 'TN': 5, 'CT': 5, 'NC': 5, 'WI': 5,
'MD': 4, 'IL': 4, 'UT': 3, 'IA': 3, 'MI': 3, 'AR': 2, 'MO': 2, 'SC': 2, 'AL': 2, 'NV': 2, 'OR': 1, 'SD': 1, 'ND': 1}
fig=plt.figure(figsize=(10,8), dpi= 90)
ax = plt.subplot()
colormap = plt.cm.Blues
normalize = mcolors.Normalize(vmin=min(frequency_state.values()), vmax=max(frequency_state.values()))
lists = sorted(frequency_state.items())
x, y = zip(*lists)
bars = plt.bar(x, y, color='grey')
plt.grid()
plt.xticks(rotation = 90)
for i in [2,3,5,23,24,25,31]:
bars[i].set_color(colormap(normalize(lists[i][1])))
plt.show()

plotly: List of valid country names from ISO-3 code

In Python, I'm plotting a choropleth with some data for some countries in Africa:
countries = ['BDI', 'BEN', 'BFA', 'BWA', 'CIV', 'CMR', 'COD', 'CPV', 'ETH', 'GHA', 'GIN', 'GMB', 'KEN', 'LBR', 'LSO', 'MDG', 'MLI', 'MOZ', 'MUS', 'MWI', 'NER', 'NGA', 'RWA', 'SEN', 'SLE', 'SOM', 'STP', 'TCD', 'TGO', 'TZA', 'UGA', 'ZAF', 'ZMB', 'ZWE']
z = [5, 6, 1, 1, 2, 14, 7, 1, 3, 6, 1, 2, 13, 1, 3, 11, 4, 2, 1, 6, 1, 50, 18, 5, 2, 4, 1, 1, 4, 16, 15, 4, 10, 4]
Plotting this data like so:
import plotly.offline as py
import plotly.graph_objs as go
countries = ['BDI', 'BEN', 'BFA', 'BWA', 'CIV', 'CMR', 'COD', 'CPV', 'ETH', 'GHA', 'GIN', 'GMB', 'KEN', 'LBR', 'LSO', 'MDG', 'MLI', 'MOZ', 'MUS', 'MWI', 'NER', 'NGA', 'RWA', 'SEN', 'SLE', 'SOM', 'STP', 'TCD', 'TGO', 'TZA', 'UGA', 'ZAF', 'ZMB', 'ZWE']
z = [5, 6, 1, 1, 2, 14, 7, 1, 3, 6, 1, 2, 13, 1, 3, 11, 4, 2, 1, 6, 1, 50, 18, 5, 2, 4, 1, 1, 4, 16, 15, 4, 10, 4]
layout = dict(geo={'scope': 'africa'})
data = dict(
type='choropleth',
locations=countries,
locationmode='ISO-3',
colorscale='Viridis',
z=z)
map = go.Figure(data=[data], layout=layout)
py.plot(map)
Output is an interactive map with the z value and ISO-3 code displayed when you hover over.
Intended output:
I would like to have the country's name displayed rather than ISO-3 code. I suppose this can be done by passing in the countries' names as the locations and setting locationmode to 'country names'.
Is there a mapping from ISO to country name for the purposes of this? A list/dict/DataFrame of corresponding values within the plotly config, for example? I've had a look but can't find anything.
Thank you
We converted the country name by referring to a two-letter abbreviation from a three-letter abbreviation. The site from which the data was referenced is the following
Country ISO Codes -> Country Names
c_names = []
for c in countries:
for c2,c3 in iso3.items():
if c3 == c:
for v2,v3 in names.items():
if c2 == v2:
c_names.append(v3)
c_names
['Burundi',
'Benin',
'Burkina Faso',
'Botswana',
'Ivory Coast',
'Cameroon',
'Democratic Republic of the Congo',
'Cape Verde',
'Ethiopia',
'Ghana',
'Guinea',
'Gambia',
'Kenya',
'Liberia',
'Lesotho',
'Madagascar',
'Mali',
'Mozambique',
'Mauritius',
'Malawi',
'Niger',
'Nigeria',
'Rwanda',
'Senegal',
'Sierra Leone',
'Somalia',
'Sao Tome and Principe',
'Chad',
'Togo',
'Tanzania',
'Uganda',
'South Africa',
'Zambia',
'Zimbabwe']

How do I display a list that contains the number of individual letters in a list of names?

I have a list of names and a list of the alphabet. I am able to determine the number of a single letter at a time. How do I check make python go through my entire alphabet list and append them in order.
listOfNames = ["Euclid", "Archimedes", "Newton", "Descartes", "Fermat", "Turing",
"Euler", "Einstein", "Boole", "Fibonacci", "Lovelace", "Noether",
"Nash", "Wiles", "Cantor", "Gauss", "Plato"]
alphaList = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
alphaCount = []
letterCount = 0
for names in listOfNames:
for letter in names:
if letter.lower() in alphaList[0]:
letterCount += 1
alphaCount.append(letterCount)
print(alphaCount)
Outcome == [9]
expected outcome == [9, 2,.....] #number of 'a's , number of 'b's...etc
You could modify your code to instead produce a dictionary of counts for each letter
alphaCount = {}
for name in listOfNames:
for letter in name:
letter_lower = letter.lower()
if letter_lower in alphaCount:
alphaCount[letter_lower] += 1
else:
alphaCount[letter_lower] = 1
Result
>>> alphaCount
{'e': 17, 'u': 4, 'c': 7, 'l': 7, 'i': 8, 'd': 3, 'a': 9, 'r': 7, 'h': 3, 'm': 2, 's': 8, 'n': 9, 'w': 2, 't': 8, 'o': 8, 'f': 2, 'g': 2, 'b': 2, 'v': 1, 'p': 1}
If you want a list of counts in alphabetical order, you can use this dictionary in a list comprehension
>>> [alphaCount.get(i, 0) for i in alphaList]
[9, 2, 7, 3, 17, 2, 2, 3, 8, 0, 0, 7, 2, 9, 8, 1, 0, 7, 8, 8, 4, 1, 2, 0, 0, 0]
A much simpler code with defaultdict. Try this:
from collections import defaultdict
listOfNames = ["Euclid", "Archimedes", "Newton", "Descartes", "Fermat", "Turing",
"Euler", "Einstein", "Boole", "Fibonacci", "Lovelace", "Noether",
"Nash", "Wiles", "Cantor", "Gauss", "Plato"]
di = defaultdict(int)
for name in listOfNames:
for letter in name:
di[letter.lower()] += 1
print(dict(di))
Outputs:
{'e': 17, 'u': 4, 'c': 7, 'l': 7, 'i': 8, 'd': 3, 'a': 9, 'r': 7, 'h': 3, 'm': 2, 's': 8, 'n': 9, 'w': 2, 't': 8, 'o': 8, 'f': 2, 'g': 2, 'b': 2, 'v': 1, 'p': 1}
EDITED:
I won't say it is the most efficient solution but it works. To generate a list of alphabets, I have used string.ascii_lowercase in string module.
from collections import defaultdict
import string
listOfNames = ["Euclid", "Archimedes", "Newton", "Descartes", "Fermat", "Turing",
"Euler", "Einstein", "Boole", "Fibonacci", "Lovelace", "Noether",
"Nash", "Wiles", "Cantor", "Gauss", "Plato"]
di = defaultdict(int)
for name in listOfNames:
for letter in name:
di[letter.lower()] += 1
alphaCount = [dict(di).get(i, 0) for i in list(string.ascii_lowercase)]
print(alphaCount)
Outputs:
[9, 2, 7, 3, 17, 2, 2, 3, 8, 0, 0, 7, 2, 9, 8, 1, 0, 7, 8, 8, 4, 1, 2, 0, 0, 0]
You can try this.
from itertools import chain
from collections import Counter
list_name=map(str.lower,listOfNames)
out=Counter(chain.from_iterable(list_name))
# Counter({'e': 17, 'a': 9, 'n': 9, 'i': 8, 's': 8, 't': 8, 'o': 8, 'c': 7, 'l': 7, 'r': 7, 'u': 4, 'd': 3, 'h': 3, 'm': 2, 'w': 2, 'f': 2, 'g': 2, 'b': 2, 'v': 1, 'p': 1})
To get in alphabetical order of counts
[out[k] for k in alphaList]
# [9, 2, 7, 3, 17, 2, 2, 3, 8, 0, 0, 7, 2, 9, 8, 1, 0, 7, 8, 8, 4, 1, 2, 0, 0, 0]
a combination of join and Counter would be a good solution
listOfNames = ["Euclid", "Archimedes", "Newton", "Descartes", "Fermat", "Turing",
"Euler", "Einstein", "Boole", "Fibonacci", "Lovelace", "Noether",
"Nash", "Wiles", "Cantor", "Gauss", "Plato"]
r = "".join(listOfNames).lower()
from collections import Counter
sol = Counter(r)
print(sol)
output
Counter({'e': 17, 'a': 9, 'n': 9, 'i': 8, 's': 8, 't': 8, 'o': 8, 'c': 7, 'l': 7, 'r': 7, 'u': 4, 'd': 3, 'h': 3, 'm': 2, 'w': 2, 'f': 2, 'g': 2, 'b': 2, 'v': 1, 'p': 1})
way 2 using while
# your code goes here
listOfNames = ["Euclid", "Archimedes", "Newton", "Descartes", "Fermat", "Turing",
"Euler", "Einstein", "Boole", "Fibonacci", "Lovelace", "Noether",
"Nash", "Wiles", "Cantor", "Gauss", "Plato"]
length = len(listOfNames)
count = 0
solution = {'a': 0, 'b': 0, 'c': 0, 'd': 0, 'e': 0,
'f': 0, 'g': 0, 'h': 0, 'i': 0, 'j': 0, 'k': 0,
'l': 0, 'm': 0, 'n': 0, 'o': 0, 'p': 0, 'q': 0,
'r': 0, 's': 0, 't': 0,
'u': 0, 'v': 0, 'w': 0, 'x': 0, 'y': 0, 'z': 0}
while count<length:
for character in listOfNames[count]:
solution[character.lower()]+=1
count+=1
print(solution)
output
{'a': 9, 'b': 2, 'c': 7, 'd': 3, 'e': 17,
'f': 2, 'g': 2, 'h': 3, 'i': 8, 'j': 0,
'k': 0, 'l': 7, 'm': 2, 'n': 9, 'o': 8,
'p': 1, 'q': 0, 'r': 7, 's': 8, 't': 8,
'u': 4, 'v': 1, 'w': 2, 'x': 0, 'y': 0,
'z': 0}

Create a DataFrame birds from this dictionary data which has the index labels

Consider the following Python dictionary data and Python list labels:**
data = {'birds': ['Cranes', 'Cranes', 'plovers', 'spoonbills', 'spoonbills', 'Cranes', 'plovers', 'Cranes', 'spoonbills', 'spoonbills'],
'age': [3.5, 4, 1.5, np.nan, 6, 3, 5.5, np.nan, 8, 4],
'visits': [2, 4, 3, 4, 3, 4, 2, 2, 3, 2],
'priority': ['yes', 'yes', 'no', 'yes', 'no', 'no', 'no', 'yes', 'no', 'no']}
labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
Create a DataFrame birds from this dictionary data which has the index labels using Pandas
Assuming your dictionary is already ordered into the correct ordering for the labels
import pandas as pd
data = {'birds': ['Cranes', 'Cranes', 'plovers', 'spoonbills', 'spoonbills', 'Cranes', 'plovers', 'Cranes', 'spoonbills', 'spoonbills'],
'age': [3.5, 4, 1.5, np.nan, 6, 3, 5.5, np.nan, 8, 4],
'visits': [2, 4, 3, 4, 3, 4, 2, 2, 3, 2],
'priority': ['yes', 'yes', 'no', 'yes', 'no', 'no', 'no', 'yes', 'no', 'no']}
data['labels'] = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
df = pd.DataFrame(data, columns=['birds', 'age', 'visits', 'priority', 'labels'])
df.set_index('labels')
Try the code below,
labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
data = {
'birds': ['Cranes', 'Cranes', 'plovers', 'spoonbills', 'spoonbills', 'Cranes', 'plovers', 'Cranes', 'spoonbills', 'spoonbills'],
'age': [3.5, 4, 1.5, np.nan, 6, 3, 5.5, np.nan, 8, 4],
'visits': [2, 4, 3, 4, 3, 4, 2, 2, 3, 2],
'priority': ['yes', 'yes', 'no', 'yes', 'no', 'no', 'no', 'yes', 'no', 'no'],
'labels' : labels
}
df = pd.DataFrame.from_dict(data)
df.set_index('labels')
You can reduce some code like:
DataFrame provides us a flexibilty to provide some values like data,columns,index and the list goes on.
If we are dealing with Dictionary, then by default dictionaries keys are treated as column and values will be as rows.
In following Code I have used name attribute through DataFrame object
df=pd.DataFrame(data,index=Labels) # Custom indexes
df.index.name='labels' # After Running df.index.name you will get index as none, by this approach you can set any name to the column
I hope this will be help full for you.
Even I encountered the same exact issue few days back and we have a very beautiful library to handle dataframes and is better than pandas.
Search for turicreate in python, it is very very similar to the pandas but has a lot more to offer than pandas.
You can define the Sframes in Turienter image description here, somewhat similar to the pandas dataframe. After that you just have to run:
dataframe_name.show()
.show() visualizes any data structure in Turi Create.
You can visit the mentioned notebook for a better understanding: https://colab.research.google.com/drive/1DIFmRjGYx0UOiZtvMi4lOZmaBMnu_VlD
You can try out this.
import pandas as pd
import numpy as np
from pandas import DataFrame
labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
data = {'birds': ['Cranes', 'Cranes', 'plovers', 'spoonbills', 'spoonbills', 'Cranes', 'plovers', 'Cranes', 'spoonbills', 'spoonbills'],
'age': [3.5, 4, 1.5, np.nan, 6, 3, 5.5, np.nan, 8, 4],
'visits': [2, 4, 3, 4, 3, 4, 2, 2, 3, 2],
'priority': ['yes', 'yes', 'no', 'yes', 'no', 'no', 'no', 'yes', 'no', 'no']}
df=DataFrame(data,index=labels)
print(df)

How to check if a word appears in ID(location in element list) of another word(key)

I have a list:
lst = [" ","1- make your choice", "2- put something and make", "3- make something happens",
"4- giulio took his choice so make","5- make your choice", "6- put something and make",
"7- make something happens", "8- giulio took his choice so make","9- make your choice",
"10- put something and make", "11- make something happens", "12- giulio took his choice so make"]
I created two dictionaries, first where i have as key the ID(number) of position of words in lst, and in value i have the words in that position.
{1: ['make', 'your', 'choice'], 2: ['put', 'something', 'and', 'make'], 3: ['make', 'something', 'happens'], 4: ['giulio', 'took', 'his', 'choice', 'so', 'make'], 5: ['make', 'your', 'choice'], 6: ['put', 'something', 'and', 'make'], 7: ['make', 'something', 'happens'], 8: ['giulio', 'took', 'his', 'choice', 'so', 'make'], 9: ['make', 'your', 'choice'], 10: ['put', 'something', 'and', 'make'], 11: ['make', 'something', 'happens'], 12: ['giulio', 'took', 'his', 'choice', 'so', 'make']}
In the second dictionarie, as key i have all words in lst, and as value i have two set()
{'and': (set([]), set([2, 10, 6])), 'happens': (set([]), set([11, 3, 7])), 'his': (set([]), set([8, 12, 4])), 'giulio': (set([]), set([8, 12, 4])), 'make': (set([]), set([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])), 'took': (set([]), set([8, 12, 4])), 'choice': (set([]), set([1, 4, 5, 8, 9, 12])), 'so': (set([]), set([8, 12, 4])), 'something': (set([]), set([2, 3, 6, 7, 10, 11])), 'put': (set([]), set([2, 10, 6])), 'your': (set([]), set([1, 5, 9]))}
In second set i put all ID where the key is located for example:
'choice': (set([]), set([1, 4, 5, 8, 9, 12]))
In first set i want to put all words which are simultaneously in all ID of key choice, example:
If we look in the lst we can see that the only word that appears in all the ID of the key choice is 'make', so the result of key choice is:
'choice': (set(['make']), set([1, 4, 5, 8, 9, 12]))
except the word 'choice', of course
any suggestion on how to see if a word appears in all the same ID of the key of second dictionary? and put it in the first set?
You can iterate the id's, flatten the all the lists to one big list and check if each word count is equal to the number of lists.
It's only one option which can be done with less expensive flow but i didn't want to complicate things.
Solution:
my_dict = {1: ['make', 'your', 'choice'], 2: ['put', 'something', 'and', 'make'], 3: ['make', 'something', 'happens'], 4: ['giulio', 'took', 'his', 'choice', 'so', 'make'], 5: ['make', 'your', 'choice'], 6: ['put', 'something', 'and', 'make'], 7: ['make', 'something', 'happens'], 8: ['giulio', 'took', 'his', 'choice', 'so', 'make'], 9: ['make', 'your', 'choice'], 10: ['put', 'something', 'and', 'make'], 11: ['make', 'something', 'happens'], 12: ['giulio', 'took', 'his', 'choice', 'so', 'make']}
words = {'and': (set([]), set([2, 10, 6])), 'happens': (set([]), set([11, 3, 7])), 'his': (set([]), set([8, 12, 4])), 'giulio': (set([]), set([8, 12, 4])), 'make': (set([]), set([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])), 'took': (set([]), set([8, 12, 4])), 'choice': (set([]), set([1, 4, 5, 8, 9, 12])), 'so': (set([]), set([8, 12, 4])), 'something': (set([]), set([2, 3, 6, 7, 10, 11])), 'put': (set([]), set([2, 10, 6])), 'your': (set([]), set([1, 5, 9]))}
for k, v in words.items():
flatten_list = [elem for id_ in v[1] for elem in my_dict[id_]]
words[k][0].update(set([word for word in flatten_list if word != k if flatten_list.count(word) == len(v[1])]))
print words
Output:
{'and': (set(['put', 'make', 'something']), set([2, 10, 6])), 'his': (set(['make', 'so', 'giulio', 'took', 'choice']), set([8, 4, 12])), 'took': (set(['make', 'his', 'so', 'giulio', 'choice']), set([8, 4, 12])), 'choice': (set(['make']), set([1, 4, 5, 8, 9, 12])), 'something': (set(['make']), set([2, 3, 6, 7, 10, 11])), 'put': (set(['and', 'make', 'something']), set([2, 10, 6])), 'your': (set(['make', 'choice']), set([1, 5, 9])), 'happens': (set(['make', 'something']), set([3, 11, 7])), 'giulio': (set(['make', 'his', 'so', 'took', 'choice']), set([8, 4, 12])), 'make': (set([]), set([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])), 'so': (set(['make', 'his', 'giulio', 'took', 'choice']), set([8, 4, 12]))}

Categories