6 Elegant Tricks in Python for Beginners
Tags: python, programming, productivity, beginners
Published: 2021-11-21 05:33:37

Hello everyone! Let's see together what elegant mechanics professional Python developers use in their code

I very often see such examples in some public Git repositories of experienced programmers.
Let's get started

#Sorting data by multiple keys

```python

peoples = [
{ 'name': 'John', "age": 64 },
{ 'name': 'Janet', "age": 34 },
{ 'name': 'Ed', "age": 24 },
{ 'name': 'Sara', "age": 64 },
{ 'name': 'John', "age": 32 },
{ 'name': 'Jane', "age": 34 },
{ 'name': 'John', "age": 52 },
]

peoples.sort(key=lambda item: (item['name'], item['age']))
print(people)

#Output
[
 {'name': 'Ed',   'age': 24},
 {'name': 'Jane', 'age': 34},
 {'name': 'Janet','age': 34},
 {'name': 'John', 'age': 32},
 {'name': 'John', 'age': 52},
 {'name': 'John', 'age': 64},
 {'name': 'Sara', 'age': 64}
]


```

at the output, we get alphabetical sorting, and if the values match, the sorting takes place by the second key. This will not have an effect if there are no duplicate values in your data.

#List comprehensions (List Generator)

I have already shown an understanding of the list in my previous articles, here I will just show you a few possible uses

Basic syntax

```pytohn
[ expression for item in list if conditions ]
```
A very simple example to fill in a list is a sequence of numbers:

```python
mylist = [i for i in range(10)]
print(mylist)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
```
And since you can use an expression, you can also do some math.:

```python

squares = [x**2 for x in range(10)]
print(squares)

#output
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

```
You can call a function as an expression

```python
def some_function(a):
    return (a + 5) / 2
    
result = [some_function(i) for i in range(10)]
print(result)

#output

[2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0]
```
And finally, you can use "if" to filter the list. In this case, we only keep the values that are divisible by 2:

```python
filtered = [i for i in range(20) if i%2==0]
print(filtered)

#output
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
```

#Control of memory in use by objects

I have also already mentioned sys.getsizeof() in the articles, but here I want to show you an interesting example that will show all the usefulness of memory control

```python
import sys

mylist = range(0, 10000)
print(sys.getsizeof(mylist))

#output
48
```
Just 48 bytes? Seriously? The list is from 0 to 9999?
Yes, guys and why is this happening, I'll tell you now

The fact is that range only pretends to be a list, behaves like a list, but in fact, the range function returns a class and it certainly loads less memory.

For comparison, let's create a real list with the same range

```python
import sys

myreallist = [x for x in range(0, 10000)]
print(sys.getsizeof(myreallist))

#output
87616
```
Agree, the numbers vary greatly, so it's not so useless to monitor memory.

#Dataclasses

Since version 3.7, Python offers data classes. There are several advantages over regular classes or other alternatives, such as returning multiple values or dictionaries:

* a data class requires a minimal amount of code
* that you can compare data classes because there is "__ eq __"
* you can easily output a data class for debugging because you can use "__ repr __"
* data classes that require type hints, this reduces the likelihood of errors

Here is an example of a data class in action:

```python
from dataclasses import dataclass


@dataclass
class Card:
    rank: str
    suit: str


card = Card("Q", "hearts")

print(card == card)
# True

print(card.rank)
# 'Q'

print (card.suit)
# 'hearts'

print(card)
#Card(rank='Q', suit='hearts')
```

#Finding the most common value

A fairly simple and elegant example of searching for repetitions in a sequence

```python
from collections import Counter
print(Counter('abracadabra').most_common(1))

#output
[('a', 5)]

print(Counter('abracadabra').most_common(2))

#output
[('a', 5), ('b', 2)]

print(Counter('abracadabra').most_common(3))

#output
[('a', 5), ('b', 2), ('r', 2)]

```
As an argument for Counter, you can pass, for example, list. This will also work.

#Merging Dictionaries (Python 3.5+)

Starting with Python 3.5, it's easier to combine dictionaries:

```python
dict1 = { 'a': 1, 'b': 2 }
dict2 = { 'b': 3, 'c': 4 }
merged = { **dict1, **dict2 }
print (merged)

#output
{'a': 1, 'b': 3, 'c': 4}
```
If there are overlapping keys, the keys from the first dictionary will be overwritten.

In Python 3.9, combining dictionaries becomes even cleaner. The above merge in Python 3.9 can be rewritten as:

```python
dict1 = { 'a': 1, 'b': 2 }
dict2 = { 'b': 3, 'c': 4 }
merged = dict1 | dict2
print (merged)

#output
{'a': 1, 'b': 3, 'c': 4}
```


#Conclusion

The use of some complex (to learn) mechanics in a programming language seems unnecessary to many novice programmers. 
But have you ever wondered why more experienced developers use such mechanisms more often?. Simplicity for a beginner and simplicity for a professional are two completely different things. What seems complicated and cumbersome for a beginner is actually the simplest and lightest solution for a more experienced programmer. Each of you will come to these methods and solutions by yourself. Sooner or later. It's just that in our world today, you can learn everything. Let's learn properly!

###Put on Heart if you liked it and you learned something new!
###You can also follow [ME](https://dev.to/vadimkolobanov) to receive notifications about new interesting articles.
*****
### FAQ

**I am a beginner, how should I learn Python?**

Look into the following series:

[Learning Python](https://dev.to/vadimkolobanov/series/15329)
[Step by Step to Junior](https://dev.to/vadimkolobanov/series/15349)
[Ideas](https://dev.to/vadimkolobanov/series/15331)


**Can we cooperate with you?**

If you have interesting projects and you need a python (web)developer, then you can contact me by **[mail](titanyforgame@gmail.com)** or **[discord](https://discord.gg/szEuVAhatW)** and **[LinkedIn](https://www.linkedin.com/in/vadzim-hlobuz-0b44531b7/)** for cooperation

**Connect to me on**

[Write me on Facebook](https://www.facebook.com/neo.skarynsky)

[My Twitter](https://twitter.com/decodesperato)